KeyPressedEvent到JTextArea的SetText

时间:2013-02-22 15:03:03

标签: java swing awt jtextarea keylistener

我尝试使用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
    }
}

我注意到print语句正在执行,但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 个答案:

答案 0 :(得分:5)

适合我。你是如何添加keylistener的?

test program screenshot

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

}