2 votes

Suppression de la fonction nouvelle ligne lorsque le bouton Entrée est pressé Java

J'ai un champ de texte que je voudrais voir devenir vide lorsque le bouton Entrée est pressé. Je sais que cela se ferait normalement avec une méthode setText. Cependant, lorsque je le fais, le texte est supprimé mais la fonction de saut de ligne créée par l'appui sur la touche retour. Ma question est, y a-t-il un moyen d'empêcher cette action par défaut de se produire?

merci

3voto

dogbane Points 85749

Écoutez-vous la touche ENTRÉE sur la zone de texte puis la supprimez-vous? Ce qui suit fonctionne pour moi:

final JTextArea ta = new JTextArea();
ta.addKeyListener(new KeyListener() {

    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyReleased(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_ENTER){
            ta.setText("");
        }
    }

    @Override
    public void keyPressed(KeyEvent e) {
    }
});

0voto

Bart Kiers Points 79069

Bonjour

J'ai une zone de texte que je voudrais vider lorsque le bouton Entrée est pressé.

Cela, je comprends. Voici comment vous pouvez le faire:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Main {
    public static void main(String[]args) {
        final JFrame frame = new JFrame();
        final JTextArea area = new JTextArea();
        area.setPreferredSize(new Dimension(200, 200));
        area.addKeyListener(new KeyAdapter(){
            @Override
            public void keyReleased(KeyEvent e) {
                if(e.getKeyCode() == KeyEvent.VK_ENTER) {
                    area.setText("");
                }
            }
        });
        frame.add(area);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

Je sais que cela serait normalement fait avec une méthode setText. Cependant, lorsque je le fais, le texte est supprimé mais la fonction de nouvelle ligne créée par l'appui de la touche Entrée reste. Ma question est, y a-t-il un moyen d'empêcher cette action par défaut de se produire?

Cela, je ne comprends pas.

0voto

DJClayworth Points 11288

Le problème est probablement que vous ne consommez pas l'événement de frappe, et même si la zone de texte est effacée, le traitement normal de la frappe finit par insérer un saut de ligne.

Au lieu de piéger l'événement de frappe (qui n'est pas nécessairement portable), je recommanderais d'utiliser un DocumentFilter. Il y a un tutoriel ici qui vous montre comment en écrire un. Implémentez le filtre de sorte que lorsqu'il y a un 'saut de ligne' dans la chaîne d'insertion ou de remplacement, remplacez l'intégralité du contenu du document par "".

Cependant, cette approche ne peut pas faire la différence entre un saut de ligne tapé au clavier et un collé dans la zone de texte.

0voto

anon Points 59

Avant de effacer le texte, vous devez supprimer le code de nouvelle ligne laissé par le bouton de retour. Pour ce faire, utilisez la méthode consume().

Donc pour effacer votre texte:

yourkeyevent.consume();
yourTextObject.setText("");

0voto

prasanth Points 1

Au lieu de cela, vous pouvez également utiliser :

yourTextarea.setText(null);
yourTextarea.setCaretPosition(-1);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X