Event dans une Jtable avec colonne boolean

Résolu/Fermé
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 - 4 mai 2015 à 11:21
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 - 4 mai 2015 à 15:01
Bonjour,

j'aurai besoin de votre aide pour savoir si qqun sait comment réaliser ceci :

J'ai une Jtable dans laquelle il y a 2 colonnes : 1 colonne boolean éditable, 1 colonne string non-éditable.

Cette table à environ 10 lignes avec divers choix.

Dans la 10e ligne j'aimerai que si la personne coche le boolean de la colonne 1 : alors une textbox située en dessous de la table devienne visible (ou devienne modifiable)

Plus concrètement, le 10e choix est "Autres" et si la personne coche autre, j'aimerai qu'elle puisse inscrire une donnée text.

Merci de votre aide.

Bonne journée !

--
  • Vous pouvez mettre en forme votre code grâce à la flèche en haut a droite de l'éditeur de texte.

Pensez mettre vos messages en [Résolu] et cliquer sur le + des conseil qui vous ont été utiles."
A voir également:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 mai 2015 à 12:51
Bonjour,

A priori un Listener sur la checkBox de la dixième ligne devrait suffire pour intercepter le changement et le répercuter sur la textBox à afficher.
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
4 mai 2015 à 14:01
Merci pour votre réponse.

Le problème c'est que j'ai crée cette table via l'interface de l'IDE (Netbean). Et je n'arrive pas à trouvé le nom de la Checkbox, même en cherchant dans le code générer par l'IDE.

Je suis relativement nouveau en java. J'utilise Netbean pour crée mon projet.

Ça serait vraiment sympa une explication :)
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 4/05/2015 à 14:33
Bon, déjà Netbeans c'est une mauvaise idée, il fait beaucoup trop de choses et ça masque un certains nombre de mécanismes car au lieu de faire ça en pur Java il ajoute des dépendances vers ses bibliothèques qui contournent Swing.

À choisir, WindowBuilder d'Eclipse est mieux, il ne rajoute rien (sauf utilisation avancée) et en plus il est bidirectionnel, ce qui signifie que les modifications faites à la main dans le code sont visibles ensuite sur la partie graphique.

Mais pour un débutant, le mieux c'est encore de faire ça à la main.
Voici un exemple minimaliste (en pur Java) avec un PropertyChangeListener :

import java.awt.BorderLayout;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

public class Test {

    public static void main(String[] args) {

        final String[] columns = { "Choix", "Valeur" };
        final String[] texts = { "Tata", "Toto", "Autre" };

        final int NB_ROWS = texts.length;

        final Object[][] datas = new Object[NB_ROWS][2];
        for (int i = 0; i < NB_ROWS; i++) {
            datas[i][0] = false;
            datas[i][1] = texts[i];
        }

        final JTable table = new JTable(new DefaultTableModel(datas, columns) {

            private static final long serialVersionUID = 1L;

            @Override
            public boolean isCellEditable(int row, int col) {
                return col == 0;
            }

            @Override
            public Class<?> getColumnClass(int col) {
                switch (col) {
                case 0:
                    return Boolean.class;
                case 1:
                    return String.class;
                default:
                    return super.getColumnClass(col);
                }
            }
        });

        final JTextField other = new JTextField("Précisez");
        other.setEditable(false);

        table.addPropertyChangeListener(new PropertyChangeListener() {
            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                int row = table.getEditingRow();
                int col = table.getEditingColumn();
                if (row == -1 || col == -1)
                    return;
                datas[row][col] = table.getValueAt(row, col);
                if (row == NB_ROWS - 1 && col == 0)
                    other.setEditable((Boolean) datas[row][col]);
            }
        });

        JFrame frame = new JFrame();
        frame.add(table, BorderLayout.CENTER);
        frame.add(other, BorderLayout.SOUTH);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
4 mai 2015 à 14:56
Je vois, c'est super.

Dans ce cas là je vais plutôt me lancer dans cette direction.

Merci beaucoup du conseil !

Bonne journée :)

PS:_ juste une dernière question :

à quoi sert le "frame.pack();" à la fin du code ? Merci
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 4/05/2015 à 15:00
"à quoi sert le "frame.pack();" à la fin du code ?"
Ça permet de dimensionner la fenêtre à la taille des composants qui la contienne, c'est donc la plus petite taille possible de la fenêtre sans que ce soit cassé.

Plus d'info dans la documentation : Window.pack().
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
4 mai 2015 à 15:01
Ok Merci beaucoup ;)

Vous me simplifiez la vie ;)
0