所以在我的代码中,我有一个带有MenuBar的框架,可用来添加面板。一个面板具有一些TextField,通过这些TextField我可以创建对象,将它们添加到ArrayList中,然后在JList中显示它们。
我的问题是,当我按下构建对象的按钮时,面板没有刷新以立即显示JList的内容,我实际上必须从MenuBar调用面板才能使它起作用。
所以这是我构建JList的部分,如果ArrayList存在,则将其填充(这部分在面板的构造函数中:
listModel = new DefaultListModel();
if (!MainInterface.listCat.isEmpty()) {
for (CategorieArticle c : MainInterface.listCat) {
listModel.addElement(c.toString());
}
}
list = new JList(listModel);
这是用于构建对象并将其添加到ArrayList的按钮方法(此部分位于ActionListener方法中:
public void actionPerformed(ActionEvent e) {
Object o = e.getSource();
if (o == bEnr) {
if (tfNoCat.getText().isBlank() || tfNomCat.getText().isBlank()) {
} else {
MainInterface.listCat.add(new CategorieArticle(tfNomCat.getText()));
tfNoCat.setText("");
tfNomCat.setText("");
mainPanel.revalidate();
mainPanel.repaint();
}
}
}
问题是。revalidate()和。repaint()不会刷新Panel使其经历第一段代码并填充JList。
非常感谢您的帮助。
list = new JList(listModel);
上面的代码不执行任何操作。您创建了一个新的JList,但从未将其添加到框架中。
不要继续创建JList。 JList仅创建一次,并添加到添加到框架的滚动窗格中。
要更改显示在JList中的数据,只需更新现有JList的ListModel。 JList将自动重新绘制自身。
mainPanel.revalidate();
mainPanel.repaint();
也不需要,因为您从不向面板添加任何组件。