【问题标题】:KeyPressedEvent to SetText for JTextAreaJTextArea 的 KeyPressedEvent 到 SetText
【发布时间】:2013-02-08 05:44:57
【问题描述】:

我尝试使用 NetBeans 在我的 Java.Swing 应用程序中创建一个 JTextArea,以便当我按下 Enter 按钮时。 JTextArea 将显示“BUTTON PRESSED”。

这是我所拥有的:

private void keyPressedEvent(java.awt.event.KeyEvent evt)
{
    if(evt.getKeyCode() == KeyEvent.VK_ENTER)
    {
         System.out.println("HERE"); //For sanity check.
         txtArea.setText("BUTTON PRESSED");
         System.out.println("HERE AGAIN"); //For sanity check
    }
}

我注意到打印语句正在执行,但 txtArea 没有设置文本。

我做了一些研究,认为应该在某个地方调用 evt.consume(),但我不确定它是如何工作的。

编辑: 我尝试将evt.consume() 放在if-block 中,但仍然没有设置文本。

像这样添加关键监听器:

private void initComponents() {

    jScrollPane1 = new javax.swing.JScrollPane();
    jTextArea1 = new javax.swing.JTextArea();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jTextArea1.setColumns(20);
    jTextArea1.setRows(5);
    jTextArea1.addKeyListener(new java.awt.event.KeyAdapter() {
        public void keyPressed(java.awt.event.KeyEvent evt) {
            KeyPressedEvent(evt);
        }
    });
    jScrollPane1.setViewportView(jTextArea1);

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(59, 59, 59)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(175, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(40, 40, 40)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(164, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>

【问题讨论】:

  • 1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2)查看键绑定而不是KeyListener。 3) J2SE 中没有KeyPressedEvent 这样的类或方法。复制/粘贴这些东西,而不是编造它们。
  • setText 不起作用时是否有任何错误/堆栈跟踪?
  • 没有错误。我更新了OP。我使用 NetBeans 通过 RightClick => Properties => Add Key Pressed Event 来添加 KeyPressed 事件
  • 你为什么使用 KeyListener 来监控 enter 键?你应该使用 ActionListetner。无法保证输入外观的“接受”操作

标签: java swing awt jtextarea keylistener


【解决方案1】:

为我工作。你是如何添加 keylistener 的?

public class TextAreaTest extends KeyAdapter {

  private JFrame frame = new JFrame("Text Area Test");
  private JTextArea area = new JTextArea();

  public static void main(String[] args) {
    TextAreaTest test = new TextAreaTest();
    test.go();
  }

  private void go() {    
    area.addKeyListener(this);
    frame.getContentPane().add(area);
    frame.setVisible(true);
  }

  @Override
  public void keyPressed(KeyEvent evt) {
    if(evt.getKeyCode() == KeyEvent.VK_ENTER)
    {
         System.out.println("HERE"); //For sanity check.
         area.setText("BUTTON PRESSED");
         System.out.println("HERE AGAIN"); //For sanity check
    }
  }

}

【讨论】:

  • 刚刚更新了我如何添加关键监听器的 OP。它是使用 NetBeans 自动生成的(右键单击 => 属性 => 添加 KeyPressed)。我做了一个小规模的这个项目,并注意到它似乎有效。难道是因为我也有 keyTyped 事件?
  • “刚刚更新了 OP 与我如何添加关键侦听器。” 您是否尝试过 this 答案中的代码?它对你有用吗?您是否注意到您必须先修复导入(假设 Netbeans 没有自动执行此操作),然后才能运行它并查看它?除非导入,此代码是 SSCCE,它比问题编辑中的不可编译代码 sn-p 短。所以重复一遍(这次声音大一点).. 如需更好的帮助,请尽快发帖SSCCE
猜你喜欢
  • 2014-08-17
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 2012-07-13
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多