未添加到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;

再次感谢您的帮助。米甲

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

你建议我不要用DefaultListModel,而是用ListModel ?

我对你的程序的其余部分了解得不多。如果您只有一个相对静态的JList,那么DefaultListModel可能是完美的。如果您的程序建模一个不断变化的File实例选择,那么您可能想要实现ListModel甚至一个共享模型,如下所示。后者只是将一些方法转发给默认实现。

相关内容

  • 没有找到相关文章

最新更新