問題タブ [listcellrenderer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
662 参照

java - ListCellRendererでImageIconが遅い

class GridPanel extends JPanel静的内部クラスを持つToolSelectComboBox extends JComboBox、があり、これには2つの静的内部クラスToolSelectComboBoxModel implements ComboBoxModelとがありToolSelectComboBoxRenderer implements ListCellRendererます。パネルにはToolSelectComboBox(TSCB)が表示され、そのコンストラクターはモデルとレンダラーを私が作成したカスタムのものに設定します。ボックスは正しく作成され、そのモデルとレンダラーは正しく機能します。

ただし、レンダラーのgetListCellRendererComponent(...)メソッドは、それが返すImageIcononを使用します。JLabelアイコンは正しく読み込まれますが、(実行ごとに)コンボボックスを初めてクリックすると、画像の読み込みに1秒強かかります(または少なくとも非常に近くなります) 。これはファイルのロードに多少の遅れがあると思いますが、

  • これは私のローカルファイルシステム上の4kBファイルです
  • System.out.printlnコマンドの前後にコマンドを追加するとresult.setIcon(...)、それらはほぼ瞬時に相互に続きます。

私が気付いた奇妙なことは、printlnコマンドが2回起動されることです。1回はボックスをクリックしたとき、もう1回はアイコンが読み込まれたときです。

これは、親抽象クラスの単一のメソッドをオーバーライドする複数のクラスで動作するように設計されているため(アイコンへのパスを生成するため)、動作が遅いことに気付いたときに、コードを次のように変更したことにも注意してください。getIconさまざまなサイズのアイコン(16、32、および64ピクセルの2乗)をTreeMap<Tool.ImageSize, ImageIcon>(メソッドToolを持つ私が作成したインターフェイスです)に格納するコマンドを使用してアイコンを取得するだけImageIcon getIcon()です。

私の輸入品はすべて順調です。

どんな助けでもいただければ幸いです!

投稿しすぎたコードをお詫びしますが、理解できるようにしたかったのです。一方、理解するためにさらにコードが必要な場合は、遠慮なく質問してください。

コード(「」で始まり、*コメントのようなテキストを持つすべての行は、混乱したコードだけでなく、折りたたまれたJavaDocタグです):

このクラスにはメソッドが1つしかなく(の抽象メソッドCircleToolをオーバーライドして画像パスを取得する)、メソッドが機能するため(パスが正常に取得されるため、読み込みが遅いアイコンにすぎません)、このクラスは含めていません。AbstractTool

AbstractToolクラス:

0 投票する
1 に答える
3023 参照

java - 切り替え可能なグループ ヘッダーを持つ JList

Javaで以下の画像のようなことはできますか?

各リスト要素の画像を表示するには、カスタム セル レンダラーを使用して複数列のリストを使用する必要があることを理解しています。しかし、私の質問は、リスト要素のグループ化とグループ ヘッダーの使用に関するものです...

グループ化されたリスト ビューのイメージ

上の画像からわかるように、これは Windows エクスプローラーから取得したものであり、まさに Java の JList で実行しようとしているグループ化されたリスト ビューのタイプです。

0 投票する
3 に答える
7620 参照

java - カスタム ListCellRenderer は背景色を変更しません

私はこのクラスを持っています:

問題は、JList でセルを選択しても背景が赤にならないことです。setText 部分は機能しますが、セルの背景色が変更されない理由がわかりません。誰でもアイデアがあります、ありがとう!

0 投票する
3 に答える
1537 参照

java - 複数の ListCellRenderer

単一のクラスに複数の ListCellRenderer の実装を含めることは可能ですか?

実際、私のアプリケーションには複数の JList があり、それぞれに異なる ListCellRenderer が必要です。

ListCellRenderer の Component メソッドを実装するために別のクラス名を使用できますか。

例: Component メソッドの実装を含む「MultiColumnCellRenderer」という名前のクラスと、Component メソッドの他の実装を含む「MultiColumnCellRenderer2」という名前の別のクラスがあるとします。

そして、私が次のようなことをすると:

うまくいかない……。

list1 と list2 の両方で異なるレンダリングを探しています。

どうすればこれを達成できますか

0 投票する
1 に答える
1315 参照

java - ListCellRenderer の JLabel にマウス リスナーを追加します。

2 つの JLabel で構成される ListCellRenderer があります。1 つはテキスト用、もう 1 つは終了イメージ (小さな十字) 用です。

その小さな十字にマウスリスナーを追加したいのですが、クリックすると、項目が JList から削除されます。

0 投票する
2 に答える
17322 参照

java - アイテムの色を設定するJavaJList

JListに表示されるアイテムの色を変更する方法を教えてください。

オンラインユーザーとオフラインユーザーを表示できるユーザーJListを作成していますが、オフラインユーザーはオンラインユーザーとは異なる色にする必要があります。

ユーザーを作成するための私のコード

0 投票する
2 に答える
1503 参照

java - JavaのJListでJCheckBoxチェックトグルロジックの問題

こんにちは私はJListにあるチェックボックスを切り替えるのに問題があります。アイテムがクリックされたときにチェックボックスがオンになっていることを望みます。もう一度チェックされた場合は、チェックされていない状態に切り替えます。CtrlキーやShiftキーを使用せずに、複数のアイテムにチェックマークを付けたり、チェックマークを外したりできるようにしたいと考えています。

これが私がテーブルにデータを追加しようとしている方法です、何らかの理由で何も表示されません、何か考えはありますか?

0 投票する
1 に答える
5272 参照

java - JComboBox の表示領域の外観を変更する方法

JComboBox にカスタムの BasicComboBoxRenderer を使用しており、ドロップダウン リストの項目の外観を変更しました。ただし、これらの変更は、コンボボックスに表示される単一のトップ項目にも適用されます (呼び出し方がわからない)。

可能であれば、一番上のアイテムをリスト内の他のアイテムから独立させたいです。また、フォーカスされているときに一番上のアイテムの青い色を取り除きたいと思います(setFocusable(false)は私が望むものではありません)。

「レンダラー インデックス」(-1) を使用してトップ アイテムに影響を与えようとしましたが、効果がないようです。

何か案は?

PS 残念ながら、画像を追加してより明確にすることはできませんでした (評判なし)。

編集: 一番上の項目をドロップダウン リストの他のすべての項目から独立させたいと言うとき、私は常に残りの項目とは異なって見えることを意味します。たとえば、私のカスタム BasicComboBoxRenderer では、選択した項目に別の背景を設定しましたが、この背景は一番上の項目にも適用されます (選択した項目がコンボボックスの一番上の項目になるため)。

編集 2: トップ項目 = コンボボックスの表示領域を意味していたので、ドロップダウン リストの最初の項目ではなく、表示領域に表示される項目に影響を与えたいと考えています。コンボボックス自体で setBackground と setFocusable(false) を使用してこれを行うことができました (フォーカスメカニズムを維持したいので、これはあまり役に立ちません)。しかし、問題は (フォーカスの問題を除いて) たとえば、カスタムの BasicComboBoxRenderer または ListCellRenderer クラスを介してリスト内の各項目に境界線を設定すると、この同じ境界線が表示領域に表示される項目に表示されることです。したがって、ここに2つの質問があります:

--ドロップダウン リストのアイテムと表示領域の単一アイテムのレイアウトを区別する方法はありますか?

-- ボタンで setFocusPainted(false) を使用するときのように、フォーカス メカニズムを無効にせずにコンボボックスのフォーカス カラーを無効にする方法はありますか? (また、コンボボックスにカスタム FocusListener を追加しようとしましたが、focusGained() によって背景に加えられた変更はボタンのみに影響し、表示領域に表示されるアイテムには影響しません)。

混乱と複数の編集で申し訳ありません...

0 投票する
2 に答える
3235 参照

java - getListCellRendererComponent は何回呼び出されますか?

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 つのケースしか理解できません。残りは狂っているように見える...