0

您好,我有以下设置。

在此处输入图像描述

这是我的 6 节课。在 BankApp 内部,我有一个存储所有人员对象的数组列表。

BankAccView 和 PersonView 都有一个 JComboBox,因此我可以选择一个“Person”对象,例如给他或她一个 bankAccount 号码。

我遇到的问题是 JComboBox 不会自动重新加载。它看起来如下

  in my constructor I have this

personenList = new JComboBox();
personenList.addItemListener(new ItemChangeListener(this));

例如在我的 ActionListener 中(但我认为它不好)所以当创建一个新人时,JComboBox 应该每次都自动刷新。(这是什么不起作用)

personenList.addItem(persoon);

我认为这也是相关的。itemchangelistener 是这样的。

    public class ItemChangeListener implements ItemListener {

        Persoon selectedPerson;
        RekeningApp app;
        PersoonView view;

        public ItemChangeListener(PersoonView view) {

            this.view = view;

        }

        public void itemStateChanged(ItemEvent event) {
            if (event.getStateChange() == ItemEvent.SELECTED) {
                Object item = event.getItem();
                // do something with object
                if(item instanceof Persoon) {
                    this.selectedPerson = (Persoon) item;
                    view.setOverzicht(this.selectedPerson);
                } else {
                    this.selectedPerson = null;
                }
            }
        }

    }
4

1 回答 1

2

窗口关闭后,您需要以某种方式保持状态。这可以通过多种方式完成:

  1. 当窗口关闭时,不要真正关闭它,只是隐藏它。请参阅JFrame.setDefaultCloseOperation这可能是最简单的解决方案,但它并不健壮,因为从应用程序的其余部分访问存储的人员并不容易。

  2. 将数据存储在外部数据结构中,然后在重新创建视图时将数据传递到视图中。这可能是最好的解决方案,因为它允许您对数据执行其他操作,例如在下次运行程序时将其写入文件或数据库。

  3. ComboBoxModel创建由#2 中的外部数据结构支持的您自己的实现。这可能是最好的解决方案,因为您不必每次都手动加载数据(它只需要您的一个数组列表等),但对于您的情况来说,这可能是矫枉过正。我建议将此用于生产应用程序,但不用于家庭作业。

以下是您可能用于 3 的一些代码:

public class PersonComboBoxModel extends AbstractListModel<Person> implements MutableComboBoxModel<Person> {
    private List<Person> comboData;

    public PersonComboBoxModel(List<Person> initialPeople) {
        comboData = new ArrayList<Person>(initialPeople);
    }

    // Implement the interface methods.
    // Make sure to call the fireXXXchanged methods from AbstractListModel at the appropriate times.
}

您可能可以将其用于#2:

public PersonView(List<Person> initialPeople) {
    personenList = new JComboBox();
    for(Person p : initialPeople) {
        personenList.addItem(p);
    }
    personenList.addItemListener(new ItemChangeListener(this));
    // etc.
}
于 2013-10-21T19:52:12.093 回答