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 :

JTable Est-ce possible de simuler Enter Key ?


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Par défaut JTable Est-ce possible de simuler Enter Key ?
    Bonjour,

    J'ai un petit problème d'utilisation d'une JTable, et je pense qu'il doit surement exister une solution. Je détaille :

    Imaginons que dans une cellule d'une JTable il y ait la valeur "TOTO" et que l'utilisateur modifie cette cellule en tapant la valeur "NINI". Par ailleurs j'ai défini un FocusListener et un listSelectionListener,

    Supposons que par oubli, au lieu de presser pas la touche "Entrée" pour terminer sa mise à jour, l'utilisateur presse sur un "JButton" pour passer (par exemple) à une fenêtre suivante, le contrôle est bien passé au FocusListener mais si la méthode associée (focusLost), essaie de lire le contenu de cette cellule par : monModel.getValueAt(i,j) on obtient "TOTO" et non pas la nouvelle valeur "NINI".

    Y-a-t-il une solution à ce problème pour forcer l'utilisateur à presser la touche entrée ou (à la simuler sur une cellule particulière). Est-ce qu'un KeyListener pourrait être utile ?

    Merci d'avance.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut
    Bonjour.
    Tu peux utiliser l'interface TextListener. C'est une interface qui permet de gérer les événements émis lors de la modification d'un champ de saisie.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Par défaut
    D'accord je vais essayer.

    Merci beaucoup

  4. #4
    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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    @Kasko
    TextListener est un écouteur pour évenement de composant AWT (TextField, TextArea) : rien à voir avec une JTable qui est un composant Swing !

    @GérardMartinelli : je n'ai pas tout compris de ton problème, mais ça me semble être un problème de TableCellEditor (voir les méthodes cancelEditing et stopCellEditing).
    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.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,
    @Kasko
    TextListener est un écouteur pour évenement de composant AWT (TextField, TextArea)
    Bonjour joel.drigo.
    Je suis parfaitement d'accord avec vous.
    En fait,je pensais que les cellules sont remplies via des zones de saisie et j'ai pas aussi prêté attention qu'il s'agit de SWING.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 265
    Par défaut
    Effectivement, j'ai essayé de voir du côté de TextListener, mais ni la JTable, ni le model ne permet ce type de listener.

    Voici un exemple de code.

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    package test;
     
    import java.awt.Color;
    import java.awt.Font;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.JButton;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import javax.swing.JTextField;
    import javax.swing.JLabel;
    public class TestJTable extends JFrame  
    {
     
    	private static final long serialVersionUID = 1L;
    	private JScrollPane scroll;
    	private JTable MaTable;
    	String[] columnNames = {"Séq.", "Artère", "Adresse", "N°", "Bis/Te", "Quartier", "Année" };
        Object[][] data = {{"", "", "","", "", "", ""},{"", "", "","", "", "", ""} , {"", "", "","", "", "", ""}, {"", "", "","", "", "", ""}};  // 4 lignes
    	private DefaultTableModel model = new DefaultTableModel(data, columnNames);
    	int row=0, col =0;
    	private JTextField affichage;
     
        public TestJTable() 
        {
        	JPanel panneau = new JPanel();
        	this.setSize(533, 339);
    	panneau.setBounds(0, 0, 405, 202);
            getContentPane().add(panneau);
    	panneau.setLayout(null);
     
            MaTable = new JTable(model);
            scroll = new JScrollPane(MaTable);
            scroll.setBounds(0, 0, 527, 93);
            panneau.add( scroll);
     
            MaTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            MaTable.getColumnModel().getColumn(0).setPreferredWidth(38);
            MaTable.getColumnModel().getColumn(1).setPreferredWidth(80);
            MaTable.getColumnModel().getColumn(2).setPreferredWidth(140);
            MaTable.getColumnModel().getColumn(3).setPreferredWidth(40);
            MaTable.getColumnModel().getColumn(4).setPreferredWidth(54);
            MaTable.getColumnModel().getColumn(5).setPreferredWidth(100);
            MaTable.getColumnModel().getColumn(6).setPreferredWidth(54);
            MaTable.setBackground(Color.orange);
            MaTable.setFont(new Font("Times New Roman", Font.BOLD,10));
     
            JLabel msg = new JLabel(" ");
            msg.setForeground(Color.RED);
            msg.setBounds(29, 224, 423, 21);
            panneau.add(msg);
     
            affichage = new JTextField();
            affichage.setBounds(139, 183, 229, 30);
            panneau.add(affichage);
            affichage.setColumns(10);
     
     
            JButton Lire = new JButton("Case suivante");
            Lire.setBounds(170, 250, 147, 30);
            panneau.add(Lire);
            Lire.addActionListener(new ActionListener() 
            {
             	public void actionPerformed(ActionEvent arg0) 
             	{
             		model.fireTableCellUpdated(row, col); // n'a aucun effet
             		String wk = (String) MaTable.getValueAt(row,col);
             		affichage.setText(wk);
             		msg.setText("Ligne : " + (row+1)  + "  Colonne : " + (col+1));
             		col++;
             		if (col >6)  {col=0; row++;}
             		if (row >3 )
             		{	
             			msg.setText("Toutes les cases sont lues. On repart à zéro.");
             			row=0; col =0;
             		}	
             	}
             });
     
             setVisible(true);
             setLocationRelativeTo(null);
        }
     
        public static void main(String args[]) throws Exception  
            { new TestJTable(); }
    	}
    Si je tape une nouvelle valeur dans une case, sans presser la touche "Entrée", puis que je clique n fois sur le bouton "Case suivante" pour lire le contenu de cette case, je n'arrive pas a lire ce que je viens de taper. Je récupère l'ancienne valeur.

    Si vous souhaitez faire le test je vous suggère le scénario suivant :
    1) Dans les deux premières cases entrez une valeur par exemple AAAA et BBBB
    2) pressez la touche "Entrée"
    3) Modifiez la case ligne 1 colonne 2 (à la place de BBBB par exemple, tapez CCCC mais ne pressez pas la touche Entrée
    4) cliquez sur le bouton "Case suivante" deux fois. Pour la ligne 1 et colonne 2 vous obtenez BBBB et non CCCC

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

Discussions similaires

  1. Est-il possible de simuler la combinaison de touches CTRL + F5 ?
    Par beegees dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/08/2009, 18h30
  2. Réponses: 6
    Dernier message: 02/03/2009, 12h21
  3. Est-il possible de simuler la méthode post?
    Par hamidap dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/02/2009, 16h09
  4. Réponses: 8
    Dernier message: 18/08/2008, 21h18
  5. Est-il possible de simuler l'absence de réseau
    Par yodutouf dans le forum Java ME
    Réponses: 1
    Dernier message: 31/01/2008, 10h34

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