2

我是 GUI 编程新手。在练习KeyEventJava Swing 处理时,JTextarea我遇到了一个问题。侦听器接口由文本区域本身实现。

当我VK_ENTER在文本区域中按下键时,我从文本区域获取文本,然后将该文本显示到JTextPane. 之后,我将文本设置为文本区域上的空字符串。在这里,我使用keyPressed了关键事件 - 它在文本区域中创建了一个新行,但我已经将文本区域行设置为 0(零)。

实际上我想要文本区域中的一行我不想要文本区域中的两行,如何解决这个问题?

这是我的代码:

public void keyPressed(KeyEvent evt) {

   try {
       if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
           if (evt.isShiftDown()) {  
              textArea .setText(textArea.getText() + "\n");
           } else {   
                inputMsg = textArea.getText().trim();
                textArea.setText(EMPTYSTRING);
                if (!inputMsg.equals(EMPTYSTRING)) {   
                   textPane.setText(inputMsg);
                }
                textArea.requestFocus();
              }
          }
     } catch (Exception ex) {
         logger.log(Level.SEVERE, "Exception in textArea.keyReleased() : ", ex);
     }
}
4

2 回答 2

4

实际上我想要 textarea 中的一行我不想要 textarea 中的两行,如何解决这个问题?

那你为什么使用textarea?,使用JTextField

在提问者的评论后编辑:

keyPressed当您在方法中提供您的逻辑时,额外的新行即将到来。当您释放该键时,ENTER 使其对文本区域产生影响(通过为 ENTER 添加新行)。

您可以在方法中尝试您的逻辑public void keyReleased(java.awt.event.KeyEvent evt),它应该可以工作。

其他方式可能是在您的逻辑之后在按下事件中使用释放的事件,但我不确定如何。

于 2012-12-27T13:06:38.910 回答
2

当您输入任何长度的单行时,您应该考虑使用JTextField.

理想情况下,JTextArea可用于接受多行输入。

于 2012-12-27T13:11:28.433 回答