Domanda

Premessa:. Sono orribile con Java, e peggio con componenti Java ui

Ho trovato diversi tutorial diverse su come aggiungere pulsanti per le tabelle, ma sto lottando con le caselle di controllo aggiungendo. Ho bisogno di avere una colonna che disegna una casella di testo spuntata su predefinito (cellule renderer penso maniglie che), poi click del tickbox, unticks la casella, ridisegni detta scatola, e spara fuori un qualche evento che possono tenere traccia.

Al momento 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 le zecche e unticks la casella se è selezionata quella riga. Ma io non so come gestire gli eventi. Proprio quello che chiedo è forse un link ad un buon tutorial su come aggiungere caselle di controllo in modo pulito ad un JTable. Qualsiasi Assist è molto apprezzato:)

È stato utile?

Soluzione

Non c'è bisogno di creare il proprio tavolo renderer. Ecco un esempio più semplice . Basta creare un modello di tabella personalizzata e per una data colonna restituire la classe Boolean per:

public Class getColumnClass(int column)

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

public boolean isCellEditable(int row, int column)

JTable si occupa del rendering per voi.

Un altro esempio è qui.

Altri suggerimenti

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

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

Ecco un semplice piuttosto elaborare esempio utilizzando un TableCellRenderer e TableCellEditor. Vedi anche, Concetti: Editor e Renderers .

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

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

Nel tipo di colonna Swing set Designer per booleano

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top