IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

association d'un evenement key au clique souris


Sujet :

Composants Java

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut association d'un evenement key au clique souris
    Bonjour les dev, mon bonheur se trouve ici
    J’ai une Jtable contenant évidement des lignes et des colonnes, sur chaque cellule je saisi des données qui seront ensuite enregistrées dans ma base de donnée.
    Le petit souci que j’ai, c’est que lors de ma dernière saisie (la dernière cellule saisi) si je ne clique pas sur la touche entré ma saisi ne sera pas prise en compte. Avant l’envoie de mes données à ma base, j’ai pensé à faire NomTable.validate() ; mais ça ne marche pas , toujours la dernière saisi n’est pas prise en compte. Je pense donc à associer à mon clique (sur le bouton pour enregistrer mes donnée) l’événement du key (clique sur entré). Est-ce que quelqu’un aurait une idée comment le faire ?

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu peux utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TableCellEditor editor = table.getCellEditor();
    if ( editor!=null ) {
        editor.stopCellEditing();
    }
    Ce qui va forcer, si elle est valide, la valeur saisie à aller dans le modèle.

    Démo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    public class TableEditingDemo {
     
    	public static void main(String[] args) {
     
    		String[] cols = {"col1","col2","col3"};
    		Object[][] data = new Object[5][cols.length];
    		for(Object[] dataRow : data) {
    			Arrays.fill(dataRow, "");
    		}
     
    		JTable table = new JTable(data, cols);
     
    		JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
    		JButton button = new JButton("Afficher les valeurs");
    		button.addActionListener(e-> afficher(table));
    		buttonPanel.add(button);
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.add(table);
    		frame.add(buttonPanel, BorderLayout.SOUTH);
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
     
    	private static void afficher(JTable table) {
     
    		TableCellEditor editor = table.getCellEditor();
    		if ( editor!=null ) {
    			editor.stopCellEditing();
    		}
     
    		TableModel model = table.getModel();
     
    		JTextArea area = new JTextArea();
    		area.setTabSize(8);
    		for(int row = 0; row<model.getRowCount(); row++) {
    			if( row>0 ) area.append("\n");
    			for(int col=0; col<model.getColumnCount(); col++) {
    				if( col>0 ) area.append("\t");
    				area.append(String.valueOf(model.getValueAt(row, col)));
     
    			}
    		}
    		JOptionPane.showMessageDialog(table, area);
     
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    merciiiiiii c'est resolu effectiveemnt, il fallait ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      TableCellEditor e=tab.getCellEditor();
       if(e!=null){
           e.stopCellEditing();
       }

  4. #4
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    Un autre petit soucis, concernant ma même table.
    quand je recupére mes données à partir de ma base pour les reecrire dans ma table, toute les cellule s'editent normalement, sauf la cellule (0,0) est tjs vide (j'ai affiché la chaine qui est censé etre dans la cellule et elle est bien récupéré de la base, donc ce n'est pas un problème de récupération mais un probleme d'edition de la cellule 0.0)

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Sans code, difficile de savoir.

    Peut-être un problème avec le type (qui ne peut être déterminé automatiquement à partir d'une valeur null). Tu as bien défini des types sur ton modèle (en redéfinissant getColumnClass()) ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     while(rsltSet.next()){
     
     
                    String m1=rsltSet.getString("m1");
                    if(m1.length()>3){
                    String m1t[]  = m1.split(" ");
                    System.out.println(  "  "+m1t[0]);  //ici ça s'affiche normalement
                    o.tab.setValueAt(m1t[0], 0, 0);       //ici ça ne s'ecrit pas
     
                    o.tab.setValueAt(m1t[1], 0, 1);
                    o.tab.setValueAt(m1t[2], 0, 2);
                    o.tab.setValueAt(m1t[3], 1, 1);}
    //////////
    ////////////
    /////////

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    C'est le code du modèle qu'il faudrait que je vois aussi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(  "  "+m1t[0]);  //ici ça s'affiche normalement
    C'est-à-dire normalement ? Qu'est-ce qui s'affiche ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    o.tab.setValueAt(m1t[0], 0, 0);       //ici ça ne s'ecrit pas
    Tu veux dire que que dans la table, la valeur affichée pour cette cellule ne correspond pas à la valeur de m1t[0] ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    ça s'affiche normalement, c'est à dire exactement la valeur que je voudrais affecter a 0.0 !
    au fait dans la cellule 0.0 rien n'est affiché! un vide quoi! comme si elle est ineditable!

    voici le code du modele:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
            tab.setModel(new javax.swing.table.DefaultTableModel(
                new Object [][] {
                    {"", "", ""},
                    {"", "", ""},
                    {"", "", ""},
                    {"", "", ""},
                    {"", "", ""},
                    {"", "", ""},
                    {"", "", ""},
                    {"", "", ""},
                    {"", "", ""},
                    {"", "", ""},
                    {"", "", ""},
                    {"", "", ""},
                    {"", "", ""},
                    {"", "", ""}
                },
                new String [] {
                    "Title 1", "Title 2", "Title 3"
                }
            ));
    je vois que tout est noraml!!
    donc je ne vais pas prendre en consideration la ligne 0! je n'veux pas m'casser les dent sur cette cellule la!

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Avec l'extrait de code que tu me montres, je ne vois rien d'anormal qui expliquerait pourquoi la première cellule de la première ligne s'affiche vide.

    Sans le code complet, je ne peux que me perdre en conjectures.

    A noter que l'ordre des lignes et des colonnes de la table ne correspondent pas toujours forcément à leurs ordres respectifs dans le modèle, il est donc préférable dans le cas général d'affecter le modèle et non la table. Donc, au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    o.tab.setValueAt(m1t[0], 0, 0);
    il vaut mieux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    o.tab.getModel().setValueAt(m1t[0], 0, 0);
    ou éventuellement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    o.tab.setValueAt(m1t[0], o.tab.convertRowIndexToView(0), o.tab.convertColumnIndexToView(0));
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2014
    Messages : 200
    Points : 75
    Points
    75
    Par défaut
    Effectivement, il fallait affecter ma valeur au model avec l'instruction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    o.tab.getModel().setValueAt(m1t[0], 0, 0);
    Tu me sauve toujours, je te remerci et je te felicite pour ton savoir

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo