Mettre JComboBox dans JTable
Je veux mettre personne JComboBoxes dans chacune des cellules d'un JTable. c'est à dire. La JComboBox contenu n'est pas identique pour chaque cellule.
En gros, je voudrais être en mesure de simplement appeler le code suivant pour ajouter une ligne de JComboBox dans la JTable. Quelqu'un a une idée? Grâce
JComboBox cb1 = new JComboBox(...);
JComboBox cb2 = new JComboBox(...);
model.addRow(new Object[] {"Row name", cb1, cb2} );
JComboBox cb3 = new JComboBox(...);
JComboBox cb4 = new JComboBox(...);
model.addRow(new Object[] {"Row name 2", cb3, cb4} );
Le plus proche de l'exemple de code que je peux trouver est comme suit. Mais il est où JComboBox contenu est identique pour la colonne individuelle. Pas la solution dont j'ai besoin.
TableColumn col = table.getColumnModel().getColumn(vColIndex);
col.setCellEditor(new MyComboBoxEditor(values));
où
public class MyComboBoxEditor extends DefaultCellEditor {
public MyComboBoxEditor(String[] items) {
super(new JComboBox(items));
}
}
source d'informationauteur Dan
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple est de mettre en place votre propre TableModel
Charge en vous JTable. Si vous n'avez pas remplacé le défaut de rendu de cellule pour les Booléens, vous tous, les cellules seront rendus sous forme de cases à cocher grâce à vous, la mise en œuvre de getColumnClass(). Tous les utilisateurs d'entrée de ces cases à cocher sont recueillies auprès de nos setValueAt().
Étendre JTable avec ce code:
Cela va créer un unique JComboBox cellule de l'éditeur pour chaque zone de liste modifiable, vous obtenez la valeur pour l'.
Vous avez besoin de remplacer:
...dans TableCellEditor. La valeur transmise à cette méthode est que vous pouvez mettre dans votre JComboBox. Cela signifie que la "valeur" de cette cellule particulière doit être quelque chose qui peut être traduit dans une collection. Il pourrait juste être une Liste d'objets ou elle pourrait être un POJO avec des champs qui pourrait être fait dans un JComboBox.
Donc, il suffit d'éditer MyComboBoxEditor pour remplacer cette méthode et de changer de modèle, afin de permettre un Objet qui représente en fait plusieurs autres objets.
Je suis sûr que cela va résoudre votre problème. Mention dans la colonne qui vous devez définir la zone de liste modifiable .getColumn(int colonne)
La JComboBox contenu est rendu identique pour chaque ligne de sélection parce que
la JTable n'offre pas la possibilité d'avoir plus d'un éditeur par colonne.
Vous devez étendre la classe JTable à l'appui d'une sélection supplémentaire pour les lignes.
Cet article l'explique très bien:
http://www.javaworld.com/javaworld/javatips/jw-javatip102.html
En plus de cellEditor il est nécessaire de faire la cellRenderer pour la peinture de la zone de liste déroulante dans la cellule, regardez ceci:
Et ensuite, remplacer le
toString
méthode deJComboBox
.Cette page pourraient vous aider, même si il semble que vous êtes limités à avoir la même zone de liste déroulante dans toutes les cellules d'une colonne.
Vous devez créer une sous-classe JTable pour remplacer la méthode TableCellEditor getCellEditor(int ligne, int colonne).
Cela vous permet de fixer arbitrairement les cellules éditeurs de n'importe quelle ligne et de colonne de la combinaison. La valeur par défaut est moyen pour configurer la cellule de l'éditeur pour une colonne entière.
(Vous pouvez également définir cellule individuelle convertisseurs en substituant getCellRenderer.)