【问题标题】:Output on keyPressed in JTextArea在 JTextArea 中的 keyPressed 上输出
【发布时间】:2021-09-09 17:21:25
【问题描述】:

当我尝试从JTextArea 获取文本并打印它时,它会在按下下一个键后打印字符串我想在按下键时打印它。

代码如下:

textArea_1.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            x=textArea_1.getText().toString();
            System.out.println(x);
        }

        @Override
        public void keyReleased(KeyEvent e) {
        }

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

例如,首先我按下“s”键,然后按下“a”键 按'a'键后的输出是s 按's'键后的输出为空 但是我想在我按下 's' 键之后 s

【问题讨论】:

  • 根据我的回答 here,您最好使用 DocumentListener。避免在 Swing 文本组件上使用 KeyListener,因为它们是低级构造,并且您的侦听器可能会混淆组件的底层功能。
  • .... 或 Key Bindings,如果您必须响应被 键入 到文本组件中的键。
  • 感谢您的帮助

标签: java swing jtextarea keylistener


【解决方案1】:

正如在 cmets 中已经提到的,您可以使用 DocumentListener,例如:

javax.swing.event.DocumentListener myDocumentListener = new javax.swing.event.DocumentListener() {
    @Override
    public void changedUpdate(javax.swing.event.DocumentEvent documentEvent) {
        output(documentEvent);
    }
    @Override
    public void insertUpdate(javax.swing.event.DocumentEvent documentEvent) {
        output(documentEvent);
    }
    @Override
    public void removeUpdate(javax.swing.event.DocumentEvent documentEvent) {
        output(documentEvent);
    }
    private void output(javax.swing.event.DocumentEvent documentEvent) {
        Document source = documentEvent.getDocument();
        int length = source.getLength();
        try {
            System.out.println(source.getText(0, length));
        }
        catch (javax.swing.text.BadLocationException ex) {
            System.err.println("Invalid Index Supplied!");
        }
    }
};
jTextArea1.getDocument().addDocumentListener(myDocumentListener);

【讨论】:

  • 是的。这样做的主要缺点是它不区分通过击键输入数据与通过复制粘贴或通过代码输入(或删除)数据。 1+
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多