2014-11-05 60 views
0

我有一個聊天應用程序。我想讓chatTextArea中的光標回到TextArea chatTextArea的位置0。如何在按Enter鍵時停止移動到TextArea中的新行

然而,這是行不通的:

chatTextArea.setOnKeyPressed(new EventHandler<KeyEvent>() { 
    @Override 
    public void handle(KeyEvent ke) { 
     if (ke.getCode().equals(KeyCode.ENTER)) { 
      ChatClient.main(new String[]{"localhost", String.valueOf(4444), chatTextArea.getText()}); 
      chatTextArea.setText(""); 
      chatTextArea.positionCaret(0); 
     } 
    } 
}); 

我怎樣才能得到它的工作?謝謝。

回答

3

TextArea內部不使用onKeyPressed屬性來處理鍵盤輸入。因此,設置onKeyPressed不會刪除原始事件處理程序。

以防止Enter鍵TextArea的內部處理程序,您需要添加一個事件過濾器消耗事件:

chatTextArea.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() { 
    @Override 
    public void handle(KeyEvent ke) { 
     if (ke.getCode().equals(KeyCode.ENTER)) { 
      ChatClient.main(new String[]{"localhost", String.valueOf(4444), chatTextArea.getText()}); 
      chatTextArea.setText(""); 
      // chatTextArea.positionCaret(0); // not necessary 
      ke.consume(); // necessary to prevent event handlers for this event 
     } 
    } 
}); 

事件過濾使用相同的EventHandler接口。區別僅在於它在任何事件處理程序之前被調用。如果事件過濾器消耗了事件,則不會爲該事件觸發事件處理程序。

+0

謝謝@Tomas Mikula – 2014-11-05 13:32:05

相關問題