有没有办法用 JList 获取垂直索引?
Is there a way to get vertical index with a JList?
我正在尝试从 JList 获取垂直索引。我的程序将列表中的网站、用户名和密码保存到文本文件中,如下所示:
website
username
password
当我使用 for 循环创建我的 usernamesAndPasswords class 的新实例时,它是这样读的:
website website website
username username username
password password password.
我认为导致问题的代码是这样的:
save.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String outFileName;
String website, username, password;
ArrayList<UsernamesAndPasswords> upInfo = new
ArrayList<UsernamesAndPasswords>();
try{
for (int i = 0; i < list1.getSize(); i++){
website = list1.getElementAt(i);
username = list1.getElementAt(i);
password = list1.getElementAt(i);
upInfo.add(new UsernamesAndPasswords(website, username, password));
}
Scanner sc = new Scanner(System.in);
System.out.println("Enter the name of the file to write to: ");
outFileName = sc.nextLine();
upc.saveToTextFile(upInfo, outFileName);
} catch (Exception ex){
JOptionPane.showMessageDialog(null, "There was" +
"an error saving the file");
}
}});
如果这没有任何意义,请告诉我如何解决它。谢谢
看看你的循环:
for (int i = 0; i < list1.getSize(); i++){
website = list1.getElementAt(i);
username = list1.getElementAt(i);
password = list1.getElementAt(i);
upInfo.add(new UsernamesAndPasswords(website, username, password));
}
当您 运行 遇到这样的索引问题时,请尝试通过代入以下值来将您的大脑用作调试器:
// Loop iteration 1 (index = 0)
website = list1.getElementAt(0);
username = list1.getElementAt(0);
password = list1.getElementAt(0);
您列表中的第一个元素是网站名称,但在尝试设置相应的用户名或密码之前您没有增加索引。你想要:
website = list1.getElementAt(0);
username = list1.getElementAt(1);
password = list1.getElementAt(2);
根据您的文件结构,您显然需要在循环中递增该索引。
website = list1.getElementAt(i);
i++;
username = list1.getElementAt(i);
i++;
password = list1.getElementAt(i);
for
循环的 i++
将负责将索引递增到元素 4,您必须将 getSize()
作为循环的退出条件更改为 getSize() - 2
以避免索引越界。
您还可以切换为将每个网站和相应数据保存在自己的行中,并根据某些分隔符(制表符、逗号等)进行拆分,这可能会使您或其他人在概念上更简单查看您的代码,但这种更改不仅实现起来有些微不足道,而且在价值上也有些微不足道。
我正在尝试从 JList 获取垂直索引。我的程序将列表中的网站、用户名和密码保存到文本文件中,如下所示:
website
username
password
当我使用 for 循环创建我的 usernamesAndPasswords class 的新实例时,它是这样读的:
website website website
username username username
password password password.
我认为导致问题的代码是这样的:
save.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String outFileName;
String website, username, password;
ArrayList<UsernamesAndPasswords> upInfo = new
ArrayList<UsernamesAndPasswords>();
try{
for (int i = 0; i < list1.getSize(); i++){
website = list1.getElementAt(i);
username = list1.getElementAt(i);
password = list1.getElementAt(i);
upInfo.add(new UsernamesAndPasswords(website, username, password));
}
Scanner sc = new Scanner(System.in);
System.out.println("Enter the name of the file to write to: ");
outFileName = sc.nextLine();
upc.saveToTextFile(upInfo, outFileName);
} catch (Exception ex){
JOptionPane.showMessageDialog(null, "There was" +
"an error saving the file");
}
}});
如果这没有任何意义,请告诉我如何解决它。谢谢
看看你的循环:
for (int i = 0; i < list1.getSize(); i++){
website = list1.getElementAt(i);
username = list1.getElementAt(i);
password = list1.getElementAt(i);
upInfo.add(new UsernamesAndPasswords(website, username, password));
}
当您 运行 遇到这样的索引问题时,请尝试通过代入以下值来将您的大脑用作调试器:
// Loop iteration 1 (index = 0)
website = list1.getElementAt(0);
username = list1.getElementAt(0);
password = list1.getElementAt(0);
您列表中的第一个元素是网站名称,但在尝试设置相应的用户名或密码之前您没有增加索引。你想要:
website = list1.getElementAt(0);
username = list1.getElementAt(1);
password = list1.getElementAt(2);
根据您的文件结构,您显然需要在循环中递增该索引。
website = list1.getElementAt(i);
i++;
username = list1.getElementAt(i);
i++;
password = list1.getElementAt(i);
for
循环的 i++
将负责将索引递增到元素 4,您必须将 getSize()
作为循环的退出条件更改为 getSize() - 2
以避免索引越界。
您还可以切换为将每个网站和相应数据保存在自己的行中,并根据某些分隔符(制表符、逗号等)进行拆分,这可能会使您或其他人在概念上更简单查看您的代码,但这种更改不仅实现起来有些微不足道,而且在价值上也有些微不足道。