首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于某些原因,JList没有更新

由于某些原因,JList没有更新
EN

Stack Overflow用户
提问于 2015-07-26 03:01:08
回答 1查看 1K关注 0票数 0

有一个Mainpanel JFrame有InsertView作为InternalJFrames。Insert将文本数据插入到.txt文件中(必要时创建它们)。View在一个不更新的JList中显示一个.txt文件列表,在退出应用程序并再次运行之后,这些项将被正确显示,但是我想在插入它们之后立即显示它们。

预期工作:从Insert IJFrame写入.txt文件(此代码工作良好)并单击MainPanel中的显示按钮后,View中的JList应显示该项目。

我做了什么?:为了解决这个问题,我创建了一个updateValues()方法,它重新填充了JList,但仍然失败。

MainPanel

代码语言:javascript
复制
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

代码语言:javascript
复制
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());
        }
     }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-26 03:16:46

您从不更改JList的模型,因此它不会通过魔术更改它的显示,而是只在您告诉它代码时才会更改它的显示。您的updateValues方法创建了一个新的DefaultListModel,但是对它不做任何操作。也许您应该通过在setModel(model)上调用JList,将JList的模型设置为新的模型。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31633218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档