有一个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());
}
}
}
}发布于 2015-07-26 03:16:46
您从不更改JList的模型,因此它不会通过魔术更改它的显示,而是只在您告诉它代码时才会更改它的显示。您的updateValues方法创建了一个新的DefaultListModel,但是对它不做任何操作。也许您应该通过在setModel(model)上调用JList,将JList的模型设置为新的模型。
需要注意的是,这两个方法中的模型变量是两个完全唯一的变量,它们引用了唯一和独立的对象。改变一种状态对另一种完全没有影响。1)在创建新模型后再次调用jList1.setModel(model),2)考虑学习一本关于OOPs概念和Java编程的好书,因为这些变量、对象和变量范围的概念是基本内容。
https://stackoverflow.com/questions/31633218
复制相似问题