这是我第一次尝试为 Java 应用程序提供一个像样的 GUI,我需要将JLists与自定义ListModels一起使用以表示某些结构。
//The 2 below structures implement the ListModel interface, using an internal
//ArrayList, in order to be used as
//a model for 2 different JLists in my GUI.
private PropertyList propertiesList = new PropertyList();
private SelectedProperties selProperties = new SelectedProperties();
//and these are the two JLists they are the models for
private javax.swing.JList Properties_JList;
private javax.swing.JList SelectedProperties_JList;
在这里,我通过流填充我的第一个 JList:
private void OpenFile_MenuItemActionPerformed(java.awt.event.ActionEvent evt) {
final JFileChooser fc = new JFileChooser();
fc.setCurrentDirectory(null);
int returnVal = fc.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
this.Properties_JList.setModel(propertiesList);
this.propertiesList.AddFromFile(file);
} else {
//...
}
}
这恰好工作得很好。我通过读取文件导入了一些条目,它们都按预期以 .toString() 表示形式显示。
问题是第二个 JList:
private void AddToSelected_JButtonActionPerformed(java.awt.event.ActionEvent evt) {
Property p = (Property) this.Properties_JList.getSelectedValue();
this.SelectedProperties_JList.setModel(selProperties);
this.selProperties.InsertProperty(p);
this.SelectedProperties_JList.revalidate();
}
这似乎只显示了我尝试通过上述按钮事件添加到它的第一个项目,我不知道为什么。我考虑在表单的 initComponents() 调用之后立即移动两个 .setModel(...) 调用,但如果我这样做,则根本不会填充任何列表。
记录消息清楚地表明内部结构正在被填充,但即使它们都是我的 JList 的各自 ListModel,其中一个也没有按预期工作。
足够部分的代码是由 Netbeans 生成的,我花了几个小时查找 API,但仍然无法找出我做错了什么。有任何想法吗?