Java 未添加到JList的元素
我正在尝试将文件名添加到我的JList中,但没有成功。下面是一段代码:Java 未添加到JList的元素,java,swing,netbeans,jlist,Java,Swing,Netbeans,Jlist,我正在尝试将文件名添加到我的JList中,但没有成功。下面是一段代码: listLayer是一个JList,我想在其中添加文件名。作为参考,我正在用netBeans编写GUI应用程序,因此无法在此代码中创建新的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());
}