Änderung des Wertes von JCheckBox in einer JTable

Status
Nicht offen für weitere Antworten.

Balbes

Mitglied
Hallo,
ich habe eine JTable, welche in ihrer Zellen JCheckBoxen hat. Wenn der Benutzer eine Zeile in der Tabelle markieren will, klickt er mit der Maus auf eine der Zellen in deiser Zeile und sie wird gefärbt.
Wenn er aber dabei auf eine Zelle klickt, die den JCheckbox enthält, ändert er seinen Wert. Von 'selected' in 'non-selected' und umgekehrt. Das ist natürlich ein unerwünschtes Nebeneffekt. Eine Idee ist so zu machen, dass der JCkeckBox seinen Wert nach einem Doppelclick ändert. Aber ist so was überhaupt möglich? Und es ist irgendwie schwierig an den CkeckBox ranzukommen. Solche Code, z.B., funktioniert nicht:

Java:
checkbox.addMouseListener(new MouseAdapter(
  public void mouseClicked(MouseEvent e){
    if (e.getClickCount() == 2){
      System.out.println(" double click" );
   }
 }
});

Ich denke, weil der CheckBox sich eben in der Tabelle befindet. Ist er auf einer Panel, funktioniert die Code okay.
Eine andere Variante ist, dass der JCheckBox seinen Wert ändert, wenn genau auf ihn geklickt wird, und nicht auf die Zelle, welche ihn enthält. Aber wie wird das gemacht? Hat jemand damit schon konfrontiert und weiss vielleicht eine Lösung?
 
Wenn du keinen eigenen TableCellEditor in die Tabelle gesetzt hast, könntest du es damit probieren:
Java:
TableColumn column = meineTabelle.getColumnModel().getColumn( indexMeinerCheckboxSpalte );
TableCellEditor editor = column.getCellEditor();
if (editor instanceof DefaultCellEditor)
    ((DefaultCellEditor)editor).setClickCountToStart(2);

Ansonsten wird im TableCellEditor behandelt, wann editiert wird. D.h. du musst die Methode
Code:
shouldSelectCell()
so überschreiben, dass sie true zurückliefert (für die Checkbox). Das müsste genau das tun, was du wünschst.
 
Zuletzt bearbeitet:
Nein, es ist irgendwe keine Lösung oder ich vestehe nicht. Mir geht es nicht darum, dass die Zelle / Zeile markiert oder selektert wird, wenn ich auf CheckBox klicke, sondern umgekehrt, dass, wenn ich auf die Zelle, die den Checkbox enthält, klicke, aber nicht auf den Checbox selbst, sondern neben ihn, jedoch innerhab der ihn beinhaltenden Zelle, ändert er seinen Wert. Es ist auf dem Bild zu sehen, das ich zugefügt habe.
checbox.jpg

Das will ich aber nicht.
 
Achso ok.
Dann denke ich musst du einen eigenen CellEditor schreiben und die Methoden
Code:
boolean isCellEditable(EventObject)
und
Code:
boolean shouldSelectCell(EventObject)
entsprechend implementieren. Dort könntest du prüfen, ob das EventObjekt ein MouseEvent ist und dann fängts wohl an mit rechnen: Wohin wurde geklickt, auf die Checkbox oder daneben... Das stelle ich mir nicht trivial vor.
Ob es eine andere Möglichkeit gibt, weiß ich nicht, bin aber auf noch nichts derartiges gestoßen.
 
Das mit dem ((DefaultCellEditor)editor).setClickCountToStart(2); hat geholfen! Musste nur richtig einsetzen. Danke, KrokoDiehl!!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben