未添加到JList的元素

时间:2011-12-05 00:02:07

标签: java swing netbeans jlist

我正在尝试将文件名添加到我的JList但没有成功。这是代码片段:


DefaultListModel model = new DefaultListModel();
listLayer.setModel(model);
model.addElement(file.getName());

listLayer是一个JList,我想在其中添加文件名。有关信息,我在netBeans中编写我的GUI应用程序,因此我无法在此代码中创建新的JList对象,因为它已经在将JList添加到我的布局时自动创建。因此,我可以通过它的方法访问它。

非常感谢, 米甲

----------------------------------------------- --------------------------

好的我会尝试扩展它:

private void openActionPerformed(java.awt.event.ActionEvent evt) {                                     

    JFileChooser fileChooser = new JFileChooser("C:/");

    FileFilter filter1 = new MyCustomFilter();
    fileChooser.setFileFilter(filter1);

    int returnVal = fileChooser.showOpenDialog(this);

    if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();

            //String[] tokens = file.getName().split(".");
            //String name = tokens[0];

            DefaultListModel model = new DefaultListModel();
            listLayer.setModel(model);
            model.addElement(file.getName());

    } else {
        System.out.println("File access cancelled by user.");
        }
} 

是的,我的JList名为listLayer在代码的不可修改部分中声明如下: private javax.swing.JList listLayer;

再次感谢您的帮助。米甲

2 个答案:

答案 0 :(得分:2)

感谢发布更多代码。现在我们很可能会回答你的问题。我看到的一个问题是,每次按下按钮时都要重新创建一个DefaultListModel,并使用这个新模型设置JList,有效地删除了列表以前保存的所有数据。避免这样做的一种方法是简单地获取JList已经具有的模型,该模型应该是DefaultListModel,并向其添加项目。您将需要转换getModel()返回的对象,因为根据API,Java只知道它是ListModel对象,而ListModel没有DefaultListModel所做的addElement(...)方法。

或许是这样的事情:

if (returnVal == JFileChooser.APPROVE_OPTION) {
        File file = fileChooser.getSelectedFile();

        // note the cast since getModel() only returns a ListModel
        DefaultListModel model = (DefaultListModel)listLayer.getModel(); // changed**

        model.addElement(file.getName());

} 

答案 1 :(得分:1)

  

您建议我不要使用DefaultListModel,而是使用ListModel

我不太了解你的其他节目。如果你有一个相对静态的JListDefaultListModel可能是完美的。如果您的程序为不断变化的File个实例选择建模,那么您可能希望实现ListModel甚至是共享模型,如图here所示。后者只是将一些方法转发给默认实现。