0

这是我第一次尝试为 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,但仍然无法找出我做错了什么。有任何想法吗?

4

0 回答 0