Есть ли способ получить вертикальный индекс с помощью JList? - PullRequest
1 голос
/ 07 мая 2019

Я пытаюсь получить вертикальный индекс из JList. Моя программа сохраняет веб-сайт, имя пользователя и пароли в списке в текстовом файле, например:

website
username
password

Когда я использую цикл for для создания нового экземпляра моего класса usernamesAndPasswords, он читается так:

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");
            }
        }});

Если это просто не имеет смысла, дайте мне знать, как я могу это исправить. Благодаря.

1 Ответ

1 голос
/ 07 мая 2019

Посмотрите на ваш цикл:

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);

i++ вашего цикла forпозаботится об увеличении индекса до элемента 4, и вам придется изменить getSize() в качестве условия выхода цикла на getSize() - 2, чтобы избежать выхода индекса за пределы.

Вы также можете переключиться на сохранение списка с помощьюкаждый веб-сайт и соответствующие данные в отдельной строке и разделение на основе некоторого разделителя (табуляция, запятая и т. д.), который может сделать концептуально более простым для вас или кого-то еще, кто смотрит на ваш код, но это изменение не только несколько тривиально дляреализовать, но также несколько тривиально по стоимости.

...