【问题标题】:KeyEvent issue on JTextAreaJTextArea 上的 KeyEvent 问题
【发布时间】:2012-12-27 12:51:17
【问题描述】:

我是 GUI 编程的新手。在 Java Swing JTextarea 上练习 KeyEvent 处理时,我面临一个问题。监听接口由文本区自己实现。

当我在文本区域按下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);
     }
}

【问题讨论】:

  • 为了更好的答案,请尽快发布您编写的代码的 sn-p。
  • 显示一些你尝试过的代码?
  • 因为你是 Swing 的新手,所以不要考虑低级 KeyListeners,而是看看 KeyBinding,它是为 Swing 设计的。要解决这一行,只需使用 JTextField 即可在一行中实现所有内容。
  • 当我按下 VK_ENTER + VK_SHIFT 我想创建新行,所以我必须使用 textarea 关于文本字段

标签: java swing jtextarea jtextpane keyevent


【解决方案1】:

其实我想在textarea里放一行,我不想在textarea里放两行,怎么解决这个问题?

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

EDIT 在询问者的 cmets 之后:

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

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

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

【讨论】:

  • 当我按下 VK_ENTER + VK_SHIFT 我想创建新行,所以我必须使用 textarea 关于文本字段。
  • 好的,但仍然不清楚为什么以及何时要避免文本区域中的 2 行?你能用一个小的示例工作代码来更新你的问题以获得更好的帮助吗?
  • 假设我使用 KeyReleased 而不是 Keypressed 来捕获 JTextArea 上的 keyEvent ,当我按下 VK_ENTER 键时,我的代码从 JTextArea 获取文本并将这些文本粘贴到 JTextPane 和光标位置保留在同一行(返回空字符串) .假设使用 KeyPressed 做同样的事情,它在第一次按下时再创建一行。 VK_ENTER。
【解决方案2】:

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

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

【讨论】:

  • 当我按下 VK_ENTER + VK_SHIFT 时,我想创建新行,所以我必须使用 textarea 来处理文本字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 2021-12-03
  • 2018-11-11
  • 1970-01-01
相关资源
最近更新 更多