Mainpanel
JFrame有Insert
和View
作为InternalJFrames。 Insert
将文本数据插入.txt文件(必要时创建它们)。 View
显示JList中的.txt文件列表,这些文件没有更新,退出应用程序并再次运行后项目显示正确,但我想在插入后立即显示列表。
预期工作:从Insert IJFrame写入.txt文件后(此代码工作正常)并单击MainPanel
中的显示按钮,View
中的JList应该显示项目。
我做了什么?:为了解决这个问题,我制作了一个updateValues()
方法来重新填充JList,但它仍然失败。
MainPanel
:
public class MainPanel extends javax.swing.JFrame {
View view;
Insert insert;
Read read;
public MainPanel() {
initComponents();
pack();
insert = new Insert();
view = new View();
read = new Read(view);
jPanel2.add(insert);
jPanel2.add(view);
jPanel2.add(read);
insert.setVisible(true); // Initally only insert in visible
view.setVisible(false); // later I've created buttons to
read.setVisible(false); // display required IJFrame
}
private void readButtonActionPerformed(java.awt.event.ActionEvent evt) {
read.updateValues();
view.setVisible(false);
insert.setVisible(false);
read.setVisible(true);
}
}
Read
:
public class Read extends javax.swing.JInternalFrame {
private View view;
public Read(View view) {
initComponents();
pack();
DefaultListModel model = new DefaultListModel();
jList1.setModel(model);
File folder = new File("/Naruto/Dattebayo/");
File[] listOfFiles = folder.listFiles();
for(File file : listOfFiles ){
if(file.getName().endsWith(".txt"))
model.addElement(file.getName());
}
this.view=view;
}
public void updateValues() {
DefaultListModel model = new DefaultListModel();
File folder = new File("/Naruto/Dattebatyo");
File[] listOfFiles = folder.listFiles();
for (File file : listOfFiles) {
if (file.getName().endsWith(".txt")) {
model.addElement(file.getName());
}
}
}
}
答案 0 :(得分:2)
您永远不会更改JList的模型,因此它不会通过魔法更改它的显示,但只有在您使用代码告知它时才会更改其显示。您的updateValues方法创建一个新的DefaultListModel,但随后不执行任何操作。也许你应该通过在JList上调用setModel(model)
来将JList的模型设置为新模型。
需要注意的是,两种方法中的模型变量是两个完全唯一的变量,它们引用唯一且独立的对象。改变一个的状态对另一个完全没有影响。再次1)在创建新模型后调用jList1.setModel(model)
,2)考虑学习一本关于OOP概念和Java编程的好书,因为这些变量,对象和变量范围的概念是基本的东西。