s のesJTable
を表示するカスタム レンダラーがあります。ただし、ユーザーがテーブル セルをクリックしてチェックボックスをクリックしないと、チェックボックスがまだチェックされているため、これにより若干の問題が発生します。JCheckbox
boolean
特定のポイントでJCheckbox
レンダリングされた実際の境界を返す方法はありますか?JTable
JCheckbox
どうもありがとうございました。
チェックボックスの状態を変更するのは編集者の責任であり、レンダラーの責任ではありません。を使用する場合はDefaultCellEditor
、独自のコードを作成する必要はありません。
私は間違っているかもしれませんが、これはタイプがBoolean.class
(によって決定されるTableModel
)を持つすべての列のデフォルトの動作だと思います。したがって、レンダリング/編集コードを記述する必要はありません。モデルが正しい列タイプを返し、列がチェックボックスとしてレンダリングされ、チェックボックスで編集されることを確認してください。
編集:たぶん私はあなたが求めていたものに混乱しました。質問に対するPaulのコメントを見て、テーブルセル内の任意の場所をクリックすると、チェックボックスを切り替える必要があることに同意する必要があります。
JCheckBox
から返されたコンポーネントとしてを使用している場合はTableCellEditor
、フィットするように引き伸ばされるか、何か他のものになります (指定されていないようです)。したがって、当然行うべきことは、それを aJPanel
に配置することです。これにより、領域を a に割り当てる方法を選択したままにして、引き延ばすことがLayoutManager
できます。
私は実際に今日の午後に同じようなことをしました。
これが私のトリックですJTree
。私のチェックボックスは右端または行にあります。
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
int row = getRowForLocation(x, y);
Rectangle rect = getRowBounds(row);
Rectangle rect2 = new Rectangle(rect.x, rect.y, rect.height + 2, rect.height);
if (rect2.contains(x, y)) .... // The click is on the checkbox