2010-05-25 4 views
8

Préface: Je suis horrible avec Java, et pire avec les composants java ui.Comment faire pour que la colonne JTable contienne des cases à cocher?

J'ai trouvé plusieurs tutoriels différents sur la façon d'ajouter des boutons aux tables, mais je suis aux prises avec l'ajout de cases à cocher. Je dois avoir une colonne qui dessine une case de texte cochée par défaut (render render je pense que ça va), puis cliquer sur tickbox, décoche la boîte, redessine la boite, et déclenche un évènement que je peux suivre.

actuellement j'ai une CellRenderer personnalisée:

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

qui gère actuellement le dessin de la case à cocher, mais seulement les tiques et la case si décoche cette ligne est sélectionnée. Mais je ne sais pas comment gérer les événements. Vraiment ce que je demande est probablement un lien vers un bon tutoriel sur la façon d'ajouter des cases à cocher proprement à un JTable. Toute aide est grandement appréciée :)

Répondre

23

Vous n'avez pas besoin de créer votre propre moteur de rendu de table. Here's a simpler example. Il suffit de créer un modèle de tableau personnalisé et pour une colonne donnée retourner la classe Boolean pour:

public Class getColumnClass(int column) 

Si vous souhaitez que la colonne soit modifiable, return true pour

public boolean isCellEditable(int row, int column) 

JTable prend soin du rendu pour toi.

Another example is here.

+0

+1 Bon point; plus simple peut suffire. Le tutoriel décrit plusieurs rendus par défaut pour des classes spécifiques. – trashgod

+0

Accepté. Merci beaucoup pour les liens, ceux-ci sont assez simples pour moi de suivre/intégrer avec mon projet actuel – theraven

4

est ici un simple, assez élaborée example en utilisant un TableCellRenderer et TableCellEditor. Voir également, Concepts: Editors and Renderers.

Addendum: Le point de @Jay Askren est bien pris. Le rendu par défaut pour Boolean.class, comme décrit dans le tutoriel, peut être tout ce dont vous avez besoin.

+0

Merci. Je n'avais pas rencontré cet exemple particulier. Tant de choses qui se passent ... Je vais lui donner une fissure – theraven

3

La solution la plus simple est d'utiliser le DefaultTableModel et utiliser l'objet en tant que valeurs booléennes.

+0

ouais c'est vrai @Peter, Mais pourrions-nous améliorer plus en ajoutant une valeur (ID) à cette case si nous voulons le vrai valeur devient une valeur ID et FALSE toujours FAUX valeur? – gumuruh

5

Comme Pierre dit, il est facile à l'aide de la classe DefaultTableModel prolongée, ex:

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

Dans le type de jeu de colonnes Designer Swing booléen

+1

cette solution suppose que l'OP utilise un constructeur d'interface utilisateur d'un certain type –