Vous ne pouvez pas demander à une public voidméthode de renvoyer un booléen.
Geo
1
Aussi la méthode estisCellEditable
Matt
Bien que l'approche que vous spécifiez fonctionne, il n'existe pas de méthode telle que isEditable dans le AbstractTableModel. Ce qui existe est la méthode isCellEditable (int, int) qui prend rowIndex et coulmnIndex comme paramètres. L'utilisateur peut activer / désactiver de manière sélective l'édition pour une ligne / colonne particulière en remplaçant la méthode "isCellEditable" ou peut utiliser l'implémentation par défaut pour désactiver l'édition pour toutes les cellules.
samedi
150
Vous pouvez remplacer la méthode isCellEditable et l'implémenter comme vous le souhaitez, par exemple:
C'est également la solution pour que les événements de double-clic fonctionnent correctement avec JTable. Un double-clic est normalement consommé par une cellule lorsqu'elle passe en mode d'édition, ce qui empêchera une cellule de le faire et enverra à la place le double-clic au JTable lui-même. Merci pour la solution, Nelson!
anchorite
2
@Jop alors quelque chose ne va pas ailleurs dans votre code - une table ne disparaît jamais simplement parce que le modèle de la table n'est pas modifiable ...
kleopatra
1
@DougHauf il semble que vous ne connaissez pas Java, ni vraiment aucun langage puisque la plupart des langages utilisent la même syntaxe pour les opérations booléennes ... cela renvoie un booléen ... Je vous recommanderais d'aller trouver un Java très basique tutoriel et recommencez depuis le début. Essayer de se lancer comme ça va finir par apprendre tout de travers.
searchengine27
1
@DougHauf, le == est un alias de la fonction Equals qui compare les objets (à gauche et à droite) et renvoie un booléen. Je suppose que vous avez utilisé l'instruction si cela évalue les booléens et est généralement utilisé avec ce type d'expressions, par exemple si (a == b) faites quelque chose. Essayez d'imprimer a == b ou affectez simplement ceci à une variable et comprenez le résultat.
nelson eldoro
1
Le correctif ci-dessus ne fonctionne pas non plus pour moi. Cela fait disparaître la colonne et les éléments de données de la table. Ma table est créée avec table = new JTable (tempTable, columnNames) ;, où tempTable est une chaîne [] [] et Column Names est une chaîne []. Je pense que le problème est causé par le nouveau DefaultTableModel () ne spécifiant pas les données et les noms de colonne pour le modèle de table. Comment les spécifier dans le modèle de données. J'ai essayé table.setModel (tableModel (tempTable, columnNames));, mais cela provoque une erreur "Impossible de trouver le symbole".
C'est génial si vous n'utilisez pas de modèle de table personnalisé!
Kingsolmn
26
Mais vous ne pourrez pas sélectionner une cellule ou une ligne.
tianz
3
Cela semblera "grisé" dans certains L&F.
stommestack
2
Ça marche. Merci. Cependant, j'aimerais toujours savoir pourquoi la méthode du modèle de données de Nelson fait disparaître la colonne et les éléments de données du tableau.
user1164199
1
Fonctionne bien pour moi!
Colby Cox
10
Si vous créez le TableModel automatiquement à partir d'un ensemble de valeurs (avec "new JTable (Vector, Vector)"), il est peut-être plus facile de supprimer les éditeurs des colonnes:
JTable table =newJTable(my_rows, my_header);for(int c =0; c < table.getColumnCount(); c++){Class<?> col_class = table.getColumnClass(c);
table.setDefaultEditor(col_class,null);// remove editor}
Sans les éditeurs, les données ne seront pas modifiables.
-1 piratage aléatoire à des endroits inappropriés n'est jamais une option
kleopatra
S'il vous plaît, pouvez-vous expliquer pourquoi il s'agit d'un "piratage aléatoire à des endroits inappropriés"? Selon le document setDefaultEditor () : "Si l'éditeur est nul, supprime l'éditeur par défaut pour cette classe de colonne."
freesoft
oui, et revient à la valeur par défaut pour Object ;-) Donc, vous ne désactivez pas vraiment l'édition (juste accidentellement si l'une des colonnes est de type Object), il vous manque également des colonnes qui pourraient avoir un éditeur personnalisé. Il existe une API destinée à être implémentée pour contrôler la modiabilité des cellules, et c'est celle du modèle. Tout le reste est piraté et en tant que tel inapproprié.
kleopatra
Je vois ce que tu veux dire. Mais ce que j'ai compris de l'API, c'est que si je crée une table de manière rapide (avec "new JTable (Vector, Vector)"), alors la table aura des éditeurs par défaut pour toutes ses colonnes. Donc, si je lance "table.setDefaultEditor (column, null)", alors je supprimerai l'éditeur par défaut de la colonne, donc la colonne n'aura pas d'éditeur et la colonne ne sera pas modifiable. Qu'il sera?
freesoft
J'avais créé la table de cette façon new JTable(Vector, Vector)et travaillé pour moi. Je n'ai besoin d'aucun éditeur dans aucune cellule, vous avez donc mon vote.
Dani Sancas
3
J'ai utilisé ceci et cela a fonctionné: c'est très simple et fonctionne très bien.
Réponses:
Vous pouvez utiliser un
TableModel
.Définissez une classe comme celle-ci:
isCellEditable()
est en faitfalse
par défaut, vous pouvez donc l'omettre. (voir: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )Ensuite, utilisez la
setModel()
méthode de votreJTable
.la source
public void
méthode de renvoyer un booléen.isCellEditable
Vous pouvez remplacer la méthode isCellEditable et l'implémenter comme vous le souhaitez, par exemple:
ou
Remarque pour si votre JTable disparaît
Si votre
JTable
disparaît lorsque vous l'utilisez, c'est probablement parce que vous devez utiliser leDefaultTableModel(Object[][] data, Object[] columnNames)
constructeur à la place.la source
la source
il suffit d'ajouter
Ça fonctionne bien pour moi.
la source
Si vous créez le TableModel automatiquement à partir d'un ensemble de valeurs (avec "new JTable (Vector, Vector)"), il est peut-être plus facile de supprimer les éditeurs des colonnes:
Sans les éditeurs, les données ne seront pas modifiables.
la source
new JTable(Vector, Vector)
et travaillé pour moi. Je n'ai besoin d'aucun éditeur dans aucune cellule, vous avez donc mon vote.J'ai utilisé ceci et cela a fonctionné: c'est très simple et fonctionne très bien.
la source
créez une nouvelle classe DefaultCellEditor:
et utilisez setCellEditor:
la source