我有一個ScrollPane內的VBox,它包含一個HTMLEditor和其他東西。javafx HTMLEditor滾動窗格上的空格鍵滾動
當我每次點擊空格鍵時在HTMLEditor中輸入文本時,我會在編輯器中得到一個空白符,但Scrollpane也會向下滾動。首先,我通過向Scrollpane添加EventFilter並使用KEY_PRESSED事件來解決此問題。但是現在我需要在HTMLEditor中使用這個事件。
所以我的問題:是否有任何標誌告訴Scrollpane不要在KeyCode.SPACE上滾動,或者有沒有辦法將輸入焦點/關鍵事件僅路由到HTMLEditor,繞過Scrollpane?或者只有在Scrollpane上過濾此事件的方法?
您還可以重現此使用JavaFX場景生成器:
Scrollpane->垂直框(比滾動面板使滾動條出現較大) - > 2 * HTML編輯,預覽窗口中,點擊空格鍵。
解決: 加入EventFilter到HTML編輯,消耗KEY_PRESSED上的KeyCode.SPACE。
htmlEditor.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
if (event.getEventType() == KeyEvent.KEY_PRESSED){
// Consume Event before Bubbling Phase, -> otherwise Scrollpane scrolls
if (event.getCode() == KeyCode.SPACE){
event.consume();
}
}
}
});
Thanx爲您提供幫助,但是我有兩個問題:1. ScrollPane的內容在運行時添加,更改和刪除。因此,在這種情況下,我需要類似於「KeyPressedBus」的東西,在這種情況下,我將在添加,更改,移除到Scrollpane時註冊/註銷htmlKeyPressed偵聽器,然後將事件轉發到「KeyPressedBus」,然後調用「onKeyPressed 「就像你建議的聽衆一樣。 – tobias
2. Scrollpane的內容可以有超過1個HTMLEditor,所以我也必須檢查用戶在哪個編輯器中工作。爲這個小問題保留了很多開銷。我認爲這個問題必須對InputFocus做些什麼,因爲如果你用一個TextArea替換HTMLEditor,沒有問題。 TextArea的邊框顏色與它的顏色一樣,表示嘿,我得到了inputFocus。 HTMLEditor沒有這樣的顏色。 – tobias