JList因某种原因无法更新

时间:2015-07-26 03:01:09

标签: java swing

Mainpanel JFrame有InsertView作为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());
        }
     }
  }
}

1 个答案:

答案 0 :(得分:2)

您永远不会更改JList的模型,因此它不会通过魔法更改它的显示,但只有在您使用代码告知它时才会更改其显示。您的updateValues方法创建一个新的DefaultListModel,但随后不执行任何操作。也许你应该通过在JList上调用setModel(model)来将JList的模型设置为新模型。

需要注意的是,两种方法中的模型变量是两个完全唯一的变量,它们引用唯一且独立的对象。改变一个的状态对另一个完全没有影响。再次1)在创建新模型后调用jList1.setModel(model),2)考虑学习一本关于OOP概念和Java编程的好书,因为这些变量,对象和变量范围的概念是基本的东西。