2010-05-25 12 views
8

Vorwort: Ich bin schrecklich mit Java und schlimmer mit Java-UI-Komponenten.Wie macht man JTable Spalte Kontrollkästchen enthalten?

Ich habe mehrere verschiedene Tutorials zum Hinzufügen von Schaltflächen zu Tabellen gefunden, aber ich habe Probleme mit dem Hinzufügen von Kontrollkästchen. Ich brauche eine Spalte, die ein Textfeld markiert, das standardmäßig markiert ist (CellRenderer, glaube ich, handhabt das), dann beim Klicken auf Tickbox, hebt die Box auf, zeichnet die Box neu und feuert ein Ereignis ab, das ich verfolgen kann.

zur Zeit habe ich eine benutzerdefinierte Zellrenderer:

public class GraphButtonCellRenderer extends JCheckBox implements TableCellRenderer { 
public GraphButtonCellRenderer() { 
} 
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
    if(isSelected) 
     setSelected(true); 
    else 
     setSelected(false); 
    setMargin(new Insets(0, 16, 0, 0)); 
    setIconTextGap(0); 

    setBackground(new Color(255,255,255,0)); 
    return this; 
}} 

die derzeit die Häckchenkasten Griffe zeichnen, aber nur Zecken und unmarkiert das Feld, wenn diese Zeile ausgewählt ist. Aber ich weiß nicht, wie ich mit den Ereignissen umgehen soll. Wirklich, was ich verlange, ist möglicherweise ein Link zu einem guten Tutorial, wie man Checkboxen sauber zu einer JTable hinzufügt. Alle helfen wird sehr geschätzt :)

Antwort

23

Sie müssen keinen eigenen Tabellen-Renderer erstellen. Here's a simpler example. Erstellen Sie einfach eine benutzerdefinierte Tabellenmodell und für eine bestimmte Spalte geben die Klasse Boolean für:

public Class getColumnClass(int column) 

Wenn Sie die Spalte sein editierbar wollen, für

public boolean isCellEditable(int row, int column) 

JTable kümmert sich um die Rendering true zurück für Sie.

Another example is here.

+0

+1 Guter Punkt; einfacher kann ausreichen. Das Lernprogramm beschreibt mehrere Standard-Renderer für bestimmte Klassen. – trashgod

+0

Akzeptiert. Vielen Dank für die Links, diese sind einfach genug für mich zu folgen/integrieren mit meinem aktuellen Projekt – theraven

4

hier ein einfache eher example eine TableCellRenderer und TableCellEditor mit erarbeiten. Siehe auch Concepts: Editors and Renderers.

Nachtrag: @Jay Askrens Standpunkt ist gut gewählt. Der Standard-Renderer für Boolean.class, wie im Tutorial beschrieben, kann alles sein, was Sie brauchen.

+0

Danke. Ich war nicht auf dieses spezielle Beispiel gestoßen. So viel Zeug geht weiter ... Ich werde es einen Spalt geben – theraven

3

Die einfachste Lösung ist die DefaultTableModel zu verwenden und Boolean-Objekt als Wert zu verwenden.

+0

yeah das ist wahr @Peter, Aber könnten wir mehr durch Hinzufügen eines Wertes (ID) zu diesem Kontrollkästchen, wenn wir die TRUE wollen Wert wird zu einem ID Wert und FALSE immer noch FALSE Wert? – gumuruh

5

Wie Peter sagen, ist es einfach mit erweiterten DefaultTableModel Klasse, ab:

class NewTableModel extends DefaultTableModel{ 
     public Class<?> getColumnClass(int columnIndex) { 
      return getValueAt(0, columnIndex).getClass(); 
     } 
    } 
-5

Im Swing-Designer gesetzt Spalte Typ boolean

+1

Diese Lösung setzt voraus, dass das OP einen UI-Builder eines bestimmten Typs verwendet –