我试图添加文件名到我的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
甚至一个共享模型,如下所示。后者只是将一些方法转发给默认实现。