2010-05-25 20 views
8

Prefazione: Sono orribile con java e peggio con i componenti di java ui.Come rendere la colonna JTable contiene checkbox?

Ho trovato diversi tutorial su come aggiungere pulsanti ai tavoli, tuttavia sto cercando di aggiungere caselle di controllo. Ho bisogno di avere una colonna che disegna una casella di testo spuntata di default (il renderer di celle penso maniglie che), quindi al clic di tickbox, deseleziona la casella, ridisegna la casella e spara da un evento da qualche parte che posso seguire.

Attualmente ho un CellRenderer personalizzato:

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; 
}} 

che attualmente gestisce disegnare la casella da spuntare, ma solo zecche e unticks la casella se è selezionata quella riga. Ma non so come gestire gli eventi. In realtà quello che sto chiedendo è forse un link a un buon tutorial su come aggiungere le caselle di controllo in modo pulito a un JTable. Qualsiasi aiutare notevolmente è apprezzato :)

risposta

23

Non è necessario creare il proprio renderer di tabelle. Here's a simpler example. Basta creare un modello di tabella personalizzata e per una data colonna restituire il booleano classe per:

public Class getColumnClass(int column) 

Se si vuole che la colonna sia modificabile, ritorno vero per

public boolean isCellEditable(int row, int column) 

JTable si prende cura del rendering per tu.

Another example is here.

+0

+1 Buon punto; più semplice può essere sufficiente. Il tutorial descrive diversi renderer predefiniti per classi specifiche. – trashgod

+0

Accettato. Grazie mille per i link, questi sono abbastanza semplici da seguire/integrare con il mio attuale progetto – theraven

4

Ecco un semplice piuttosto complesso example utilizzando un TableCellRenderer e TableCellEditor. Vedi anche, Concepts: Editors and Renderers.

Addendum: @Jay Il punto di Askren è ben preso. Il renderer predefinito per Boolean.class, come descritto nel tutorial, potrebbe essere tutto ciò che serve.

+0

Grazie. Non avevo incontrato questo particolare esempio. Così tante cose in corso ... Gli darò una crepa – theraven

3

La soluzione più semplice è quello di utilizzare il DefaultTableModel e utilizzare l'oggetto booleano come valori.

+0

sì, è vero @Peter, Ma potremmo aumentare di più aggiungendo qualche valore (ID) a quella casella se vogliamo il VERO il valore diventa un valore ID e FALSE ha ancora valore FALSE? – gumuruh

5

Come dire Peter, il suo facile utilizzo esteso di classe DefaultTableModel, es:

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

Nella impostare il tipo di colonna Oscillazione Designer per booleani

+1

questa soluzione presuppone che l'OP utilizzi un builder UI di qualche tipo –

Problemi correlati