getListCellRendererComponent メソッドの仕組みを理解しようとしていますが、わかりません。BasicComboBoxRenderer を拡張する別のクラスを作成し、getListCellRendererComponent が呼び出されるたびに出力されるカウンターを追加しました。次に、カスタム レンダラー クラスを使用する JComboBox だけでフレームを表示する main メソッドを含むテスト クラスを実行します。このコンボボックスには合計 3 つの項目があり、setMaximumRowCount(2) を設定したので、そのうちの 2 つだけが表示されます。
- プログラムを最初に実行し、コンボボックスを含むフレームが表示されると、カウンターは getListCellRendererComponent が 6 回呼び出されたことを通知します。
- フレームがフォーカスを失ったとき (たとえば、デスクトップをクリックしたとき)、メソッドは 1 回実行されます。
- フレームがフォーカスを取り戻すと (フレームをクリックして戻すと)、メソッドが 1 回実行されます。
- 矢印ボタンをクリックしてドロップダウン リストが初めて表示されると、メソッドが 8 回実行されるとカウンターに表示されます。
- 矢印ボタンをもう一度クリックしてリストが消えると、メソッドが 1 回呼び出されます (これは常に発生します)。
- 初めて矢印ボタンをクリックすると、メソッドが5回呼び出されます。
- スクロールバー ボタンをクリックして上下に移動すると、メソッドが 1 回実行されます。
- リストの選択されていない項目にカーソルを移動すると、メソッドが2回実行され、1秒後にさらに1回実行されます(これは最もばかげています)
- リストの項目をクリックすると、メソッドが 4 回実行されます。
最初は、このメソッドはリスト内の項目の数 (およびコンボボックスの表示領域に表示されるもう 1 つ) の数だけ実行されると思っていました。
しかし、おそらく新しいアイテムがレンダリングされるため、スクロールバーのボタンをクリックしてメソッドが 1 回実行される場合など、上記の 1 つまたは 2 つのケースしか理解できません。残りは狂っているように見える...