2013-02-22 3 views
0

Я попытался сделать JTextArea в своем приложении Java.Swing, используя NetBeans, чтобы при нажатии кнопки Enter. В JTextArea отобразится «КНОПКА НАЖМИТЕ».KeyPressedEvent to SetText для JTextArea

Вот что у меня есть:

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() следует называть где-то, но я не уверен, как это работает.

EDIT: Я попытался поставить 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> 
+0

1) Для лучшей помощи рано, опубликовать [SSCCE] (http://sscce.org/). 2) Посмотрите на привязки клавиш вместо 'KeyListener'. 3) В J2SE нет такого класса или метода, как 'KeyPressedEvent'. Скопируйте/вставьте эти вещи, а не создавайте их. –

+0

Любые ошибки/stacktrace, когда setText не работает? – acostache

+0

Ошибок нет. Я обновил OP. Я использовал NetBeans, чтобы добавить событие KeyPressed, перейдя в RightClick => Свойства => Добавить нажатое событие клавиши – Rhs

ответ

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

} 
+0

Просто обновленный OP с тем, как я добавил слушателя клавиш. Он генерируется автоматически с помощью NetBeans (щелкните правой кнопкой мыши => Свойства => Добавить KeyPressed). Я сделал небольшой масштаб этого проекта и заметил, что он работает. Может быть, потому, что у меня также есть событие KeyTyped? – Rhs

+1

* «Только что обновленный OP с тем, как я добавил слушателя клавиш». * Пробовал ли код в * этом * ответе? Это сработало для вас? Вы заметили, как все, что вам нужно было сделать, это исправить импорт (предполагая, что Netbeans не сделали это автоматически), прежде чем вы сможете запустить его и увидеть? Запрет импорта, этот код является SSCCE, и он короче, чем фрагмент кода, который несовместим в редактировании вопроса. Так что повторюсь (на этот раз немного громче). * Для лучшей помощи раньше, отправьте сообщение [SSCCE] (http://sscce.org/). * –

Смежные вопросы