データの配列を渡してJListを作成します
public class MyJList extends JList() {
...
public MyJList(final Object[] listData) {
super[listData];
}
このリストは、各アイテムのコンポーネントを提供するListCellRendererを使用してレンダリングします。これは、ビジネスロジックに従って有効または無効にできます。
キーボードの矢印でナビゲートしようとすると、問題が発生します。無効にしたアイテムをスキップしたい。(適切な方向で次の項目に進みます)リストで選択されている項目に応じてUIが変わるため、KeyboardListenerを使用する必要があります。問題は、キーボードリスナーで、選択したインデックスを持つアイテムのコンポーネントを取得できないことです。このコンポーネントはJListによって所有されておらず、MyJList.getComponent(index)の呼び出しはArrayIndexOutOfBoundsExceptionで失敗します。1はインデックスが大きすぎますが、7つのアイテムが表示され、そのうち4つが有効になっています。
JListからインデックスによってコンポーネントをプログラムで取得して、それが有効になっているかどうかを判断するにはどうすればよいですか?コンポーネントを返すように見える唯一のインターフェースはgetListCellRendererComponent()です-これはコンポーネントの表示を変更します。コンポーネントを取得して、有効になっているかどうかを確認したいだけです。