Обновление содержимого JPanel через ActionListener - PullRequest
1 голос
/ 28 ноября 2011

У меня есть JPanel, который отображает группу JLabels, которые все вычисляются и печатаются на лету внутри метода.Содержимое меток хранится в ArrayList

. В другом методе большее количество объектов добавляется в ArrayList через прослушиватель действий, например:

class listener implements ActionListener{
        public void actionPerformed(ActionEvent a){

            String name = myTextArea.getText();

            Object temp = new Object(name);
            myList.add(temp);
            panel = createPanel();
            panel.revalidate();
            panel.repaint();
            card.show(contentsPanel, "panel");
    }
}

createPanel() isчто берет ArrayList и отображает его.

Это, конечно, немного абстракция, но идея остается.Проблема возникает, когда я пытаюсь обновить содержимое и внешний вид панели с помощью .revalidate() и .repaint().Я знаю, что объекты находятся в ArrayList, как я его тестировал, но панель перерисовывает себя неправильно.

Есть предложения?При необходимости я могу предоставить дополнительную информацию или код.

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

    private JPanel createPanel() {
    panel = new JPanel();
    panel.setLayout(new GridLayout(myList.size(), 1));
    panel.setBackground(new Color(250, 250, 250));

    for(int i = 0; i < myList.size(); i++){
        JLabel temp = new JLabel(myList.get(i).toString());
        panel.add(temp);
    }

    return panel;       
}   

1 Ответ

1 голос
/ 28 ноября 2011

Вы, кажется, нигде не добавили вновь созданное JPanel.

(Выглядит так, как будто вы присваиваете поле panel внутри createPanel и actionPerformed. А также есть класс с именем Object - использование любого имени, уже используемого java.lang, - плохая идея. )

...