Удаление новой функции строки при нажатии кнопки ввода Java - PullRequest
2 голосов
/ 15 сентября 2010

У меня есть текстовая область, которую я бы хотел оставить пустым при нажатии кнопки ввода. Я знаю, что это обычно делается с помощью метода setText. Однако, когда я делаю это, текст удаляется, но новая функция строки создается нажатием клавиши возврата. У меня вопрос, в любом случае, остановить ли это действие по умолчанию?

спасибо

Ответы [ 6 ]

3 голосов
/ 15 сентября 2010

Вы слушаете клавишу ВВОДА в текстовой области и затем очищаете ее?У меня работает следующее:

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) {
    }
});
0 голосов
/ 21 октября 2015

Вместо этого вы также можете использовать:

yourTextarea.setText(null);
yourTextarea.setCaretPosition(-1);
0 голосов
/ 29 июня 2014

Перед тем, как очистить текст, необходимо удалить новый код строки, кнопка возврата слева.Вы делаете это с помощью метода consume().

Итак, чтобы очистить ваш текст:

yourkeyevent.consume();
yourTextObject.setText("");
0 голосов
/ 23 сентября 2013

Я решил вашу проблему с переопределением кода в методе «public void keyTyped (KeyEvent e)» вместо «public void keyPressed (KeyEvent e)», и он работает. Вот код:

package versione1;

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

public class WhiteEnter {
    final JFrame frame = new JFrame();
    private JTextArea area = new JTextArea();


    public static void main(String[]args) {

        WhiteEnter prova = new WhiteEnter();
        prova.run();
    }

    public void run(){
        area.setPreferredSize(new Dimension(200, 200));
        area.addKeyListener(new PressEnterKeyListener());

        frame.add(area);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public class PressEnterKeyListener implements KeyListener{

        @Override
        public void keyPressed(KeyEvent e) {
        }

        @Override
        public void keyReleased(KeyEvent e) {
        }

        @Override
        public void keyTyped(KeyEvent e) {

            if (e.getKeyChar() == (KeyEvent.VK_ENTER)){
                try{
                    area.setText(null);
                    area.setCaretPosition(0);
                } catch(Exception ex){
                    ex.printStackTrace();
                }
            }
        }
    }
}
0 голосов
/ 15 сентября 2010

Возможно, проблема в том, что вы не используете событие нажатия клавиши, и хотя текстовая область очищается, обычная обработка нажатия клавиши заканчивает тем, что вставляет символ новой строки.

Вместо того, чтобы перехватывать событие нажатия клавиши (которое не обязательно переносимо), я бы рекомендовал использовать DocumentFilter. Здесь есть учебник , в котором показано, как его написать. Реализуйте фильтр таким образом, чтобы при появлении «новой строки» в строке вставки или замены заменялось все содержимое документа на «».

Однако этот подход не может отличить новую строку, введенную с клавиатуры, от строки, вставленной в текстовую область.

0 голосов
/ 15 сентября 2010

Привет

У меня есть текстовая область, в которой я хотел бы стать пустым при нажатии кнопки ввода.

Это я так понимаю.Вот как вы можете это сделать:

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);
    }
}

Я знаю, что обычно это делается методом setText.Однако, когда я делаю это, текст удаляется, но новая функция строки создается нажатием клавиши возврата.У меня вопрос: в любом случае, остановить ли это действие по умолчанию?

Это, я не понимаю.

...