0

こんにちは、次の設定があります。

ここに画像の説明を入力

これが私が持っている6つのクラスです。BankApp 内には、すべての人物オブジェクトを格納する arraylist があります。

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 の外部データ構造に基づく独自の実装を作成します。毎回データを手動でロードする必要がないため (配列リストを 1 つだけ取得するなど)、これはおそらく最良の解決策ですが、状況によってはやり過ぎかもしれません。実稼働アプリケーションにはこれをお勧めしますが、宿題にはお勧めしません。

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 に答える