2012-12-27 57 views
2

我是GUI編程的新手。在練習KeyEvent Java Swing JTextarea時,我遇到了一個問題。監聽器接口由文本區域本身實現。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); 
    } 
} 
+1

想要獲得更好的答案,請儘快發佈您寫的代碼片段。 –

+0

顯示你試過的一些代碼? –

+3

由於您是Swing的新手,因此不要考慮低級別KeyListener,而應查看[KeyBinding](http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html),這是指爲Swing。要解決這個問題,只需使用[JTextField](http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextField.html),它可以在一行中實現所有功能。 –

回答

3

其實我想在textarea的一排我不想在textarea的兩個線路,如何解決這個問題呢?

那麼爲什麼您使用的textarea?使用JTextField

編輯後,提問者的意見:

附加新的生產線來了,你在keyPressed方法提供你的邏輯。當您釋放該鍵時,ENTER使其對文本區域起作用(通過爲ENTER添加新行)。

你可以試試你的邏輯public void keyReleased(java.awt.event.KeyEvent evt)方法而不是應該工作。

其他方式可能是在按下事件後使用發佈的事件,但我不知道如何。

+0

而我按VK_ENTER + VK_SHIFT我想創建新行,所以我必須使用textarea關於textfield。 – boopathy

+0

好的,但是仍然不清楚爲什麼以及當你想避免文本區域中的2行?你可以用一個小問題更新你的問題與這個問題的更好的幫助? –

+0

假設我使用KeyReleased而不是Keypress來捕獲JTextArea上的keyEvent,而我按下VK_ENTER鍵我的代碼從JTextArea中獲取文本並將這些文本粘貼到JTextPane中,並將遊標位置保留在同一行(返回空字符串)。假設使用KeyPressed做同樣的事它會在第一次按下時再創建一行。 VK_ENTER。 – boopathy

2

當您輸入任意長度的單行時,應考慮使用JTextField

理想情況下,JTextArea可用於接受多行輸入。

+0

而我按VK_ENTER + VK_SHIFT我想創建新行,所以我必須使用textarea關於文本字段。 – boopathy