Java 未添加到JList的元素

Java 未添加到JList的元素,java,swing,netbeans,jlist,Java,Swing,Netbeans,Jlist,我正在尝试将文件名添加到我的JList中,但没有成功。下面是一段代码: listLayer是一个JList,我想在其中添加文件名。作为参考,我正在用netBeans编写GUI应用程序,因此无法在此代码中创建新的JList对象,因为在将JList添加到布局中时,它已经自动创建。因此,我可以通过它的方法访问它 非常感谢, 迈克尔 ------------------------------------------------------------------------- 好的,我将尝试进一步

我正在尝试将文件名添加到我的JList中,但没有成功。下面是一段代码:



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

非常感谢, 迈克尔

------------------------------------------------------------------------- 好的,我将尝试进一步扩展:
是的,我的名为listLayer的JList在代码的不可修改部分声明如下: 私有javax.swing.JList列表层


再次感谢您的帮助。Michal

感谢您发布更多代码。现在我们很有可能回答你的问题。我看到的一个问题是,每次按下按钮时,您都会重新创建一个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());

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


我对你们节目的其他部分了解得不够,不能说。如果您有一个相对静态的
JList
DefaultListModel
可能是完美的选择。如果您的程序对不断变化的
文件
实例选择进行建模,那么您可能希望实现
列表模型
甚至共享模型,如图所示。后者只是将一些方法转发给默认实现。

我不知道基于您发布的内容,您的代码为什么不能正常工作。请投票添加重要代码,谢谢!不要让这个问题成为一个障碍。非常感谢你的快速回答,但是它仍然不起作用。我不知道有什么问题。如果我告诉你我的JList是在JPanel中定义的,但不知道这些信息是否与发生的问题有关(我认为没有),可能会有所帮助。我认为这是一个相关的问题。@trashgod-在哪一点上你看到了我的问题和你展示的问题之间的关系?谢谢。@MichalB:您的程序使用
DefaultListModel
对所选文件进行建模,该模型绑定到特定组件,并使用
Vector
隐藏有点过时的实现。
列表
可能更灵活。@trashgod-所以如果我理解正确,你建议我不要使用DefaultListModel,而是使用ListModel?
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.");
        }
} 
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());

}