0

ユーザーに応じて選択したJListを指すJListがあります。選択したJListを監視するモニターのように機能します。カスタムセルレンダラーを実装し、プログラムで次のようなことを行うとthis.list = getSelectedList()、セルレンダラーはこの突然の情報の変更に反応しません。追加/削除機能を呼び出さずにリストデータを再評価するようにJListに通知するにはどうすればよいですか?

4

2 に答える 2

3

私が集めた質問の下のコメントから、別のリストの内容を表示する必要がある1つのリストAがあります。Aリストには、ユーザーが選択したリストの内容が表示されます。ユーザーが「選択したリスト」を変更すると、問題が発生します。

インスタンスのListModel背後を共有できます。JListだからあなたは次のようなものを持つことができます

public void selectionChanged( JList selectedList ){
  //update the model of this.list to match the model of selectedList
  this.list.setModel( selectedList.getModel() );
}
于 2012-04-21T09:31:38.647 に答える
2

this.list = getSelectedList()フィールドへの別のJListオブジェクトに影響しthis.listます。this.listこの行を実行する前にカスタムレンダラーをに設定した場合、レンダラーを別のJListオブジェクトに設定し、レンダラーが新しく選択されたリストに魔法のようにアタッチされる方法はありません。

変数とオブジェクトを混同しています。オブジェクトのメソッドを呼び出すときは、変数自体ではなく、変数が指すオブジェクトを変更します。新しく選択したJListに同じセルレンダラーをアタッチする場合は、次のコードが必要です。

ListCellRenderer renderer = this.list.getCellRenderer();
this.list = getSelectedList();
this.list.setCellRenderer(renderer);
于 2012-04-21T09:28:32.530 に答える