[JAVA] Gérer le retour chariot d'une JTextArea

Résolu/Fermé
Leona - 3 avril 2014 à 18:50
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 3 avril 2014 à 20:28
Bonjour,

Suite à ce topic : https://forums.commentcamarche.net/forum/affich-22592619-java-jtextarea-keylistener-touche-entree

J'ai appliqué la solution proposée, mais aucun effet. Voici le code :

// Ma JTextArea sur écoute
package affichage;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JLabel;

public class Texte extends JLabel implements KeyListener {

private static final long serialVersionUID = -4844102917114981793L;

public Texte(String texte, int posX, int posY) {
super(texte);
setBounds(posX, posY, 1366, 15);
addKeyListener(this);
}

public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
System.out.println(e.toString()+"Enfin moi !");
}
System.out.println(e.toString()+"C'est moi !");
}

public void keyReleased(KeyEvent e) {
System.out.println(e.toString()+"ou moi !");
}

public void keyTyped(KeyEvent e) {
System.out.println(e.toString()+"et moi !");
}


}

/* ----------------------------------------------------------------------*/

// La classe qui l'utilise
package affichage;

import java.awt.event.ActionEvent;
import java.io.IOException;

import javax.swing.JComboBox;

import sauvegarde.Chargement;
import sauvegarde.Sauvegarde;
import services.Personnage;

public class FenetreConfirListe extends FenetreConfir {

private static final long serialVersionUID = 1L;
private JComboBox jcb;
private int action;

public FenetreConfirListe() {
super(false);
repaint();
}

public FenetreConfirListe(String titre, String[] liste, int action) {
super(true);
this.action = action;

// Insertion de la zone de texte
Texte txt = new Texte(titre, 35, 32);
add(txt);

// Insertion de la liste déroulante
this.jcb = new JComboBox(liste);
this.jcb.setBounds(170, 30, 100, 20);
add(this.jcb);

// Affichage
setVisible(true);
}

public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("OK")) {
if (this.action == 0) {
FenetrePerso fPer = new FenetrePerso(new Personnage(FenetreConfirSaisie.saisie, this.jcb.getSelectedItem().toString()));
fPer.refresh();
setVisible(false);
Fenetre.fenetreI.setVisible(false);
}
if (this.action == 1) {
try {
FenetrePerso fPer;
fPer = new FenetrePerso(Chargement.charger(this.jcb.getSelectedItem().toString()));
fPer.refresh();
setVisible(false);
Fenetre.fenetreI.setVisible(false);
} catch (IOException e1) {
System.out.println("I failed !"+e1.getMessage());
}
}
}
if (e.getActionCommand().equals("Annuler")) { // Annule la saisie
setVisible(false);
}
}

}

Pourriez-vous m'aider, s'il vous plait ?

A voir également:

4 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
3 avril 2014 à 19:07
Bonsoir,

Est-ce que tu pourrais expliquer ce que tu attends exactement de ton code ?
Parce que ce n'est pas du tout sûr que tu ais exactement le même problème que la discussion que tu cites.

De plus, si tu pouvais simplifier ton code, pour donner un truc directement testable, parce que là c'est trop incomplet pour pouvoir tester.

Du coup, sans test et sans question, je ne peux pas faire grand chose pour l'instant...
0
Alors la classe de test de Texte. Désolée, la fenêtre est très laide...

import affichage.*;
import javax.swing.*;

public class Main {

public static void main (String[] args) {
JFrame jf = new JFrame("Ma fenêtre");
jf.setBounds(10, 10, 1000, 1000);
jf.add(new Texte("Ma zone", 10, 10));
jf.repaint();
jf.setVisible(true);
}
}

En gros, je voudrais qu'en appuyant sur entrée, la fenêtre se ferme. Alors comme le Listener ne fonctionne pas sur la fenêtre en elle-même, je l'ai mis sur le bout de texte.
0
Ah, c'est bon, j'ai trouvé !
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
3 avril 2014 à 20:28
Pourtant dans ton cas un Listener sur la fenêtre devrait suffire...

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;

public class Main
{
    public static void main(String[] args)
    {
        final JFrame jf = new JFrame();
        jf.setSize(100, 100);
        
        jf.addKeyListener(new KeyListener()
        {            
            @Override
            public void keyReleased(KeyEvent e)
            {
                if (e.getKeyCode()==KeyEvent.VK_ENTER)
                    jf.dispose();
            }
            
            public void keyTyped(KeyEvent e) {}
            public void keyPressed(KeyEvent e) {}
        });
        
        jf.setLocationRelativeTo(null);
        jf.setVisible(true);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
0