簡體   English   中英

JavaFX節點的Focus Listener

[英]Focus Listener for JavaFX Nodes

我是JavaFX的初學者。 我真的被困在這一點上。 :(對不起,如果我的英語很差。

我的JavaFX程序中有兩個堆棧窗格。 我想為這兩個堆棧窗格添加一個焦點監聽器。

它應該是這樣的,當我點擊一個堆棧窗格時,它應該激活此堆棧窗格的焦點獲取方法。

一旦我點擊另一個堆棧窗格,第一個堆棧窗格應該調用它的焦點丟失方法,並且應該調用當前堆棧窗格的focus gain方法。 就像我們在Swing包中有焦點事件一樣。

目前我試過這個:

stackPane.focusedProperty().addListener(new ChangeListener<Boolean>() {

                @Override
                public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
                    if (newValue.booleanValue()) {
                        focusGained(stackPane);
                    } else {
                        focusLost(stackPane);
                    }
                }
            });

private void focusGained(StackPane stackPane){
    System.out.println("Focus Gained.");
}

private void focusLost(StackPane stackPane){
    System.out.println("Focus Lost.");
}

我還嘗試在堆棧窗格上設置焦點遍歷屬性,即

stackPane.setFocusTraversable(true);

這些都不能正常工作。 當我運行它時,輸出只顯示這3行,無論我點擊堆棧窗格多少次。

Focus Gained.
Focus Lost.
Focus Gained.

請幫忙。

嗯,這有點晚了,但它可能對其他人有所幫助。 這很好用:

root.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
    focusState(newValue);
});

private void focusState(boolean value) {
    if (value) {
        System.out.println("Focus Gained");
    }
    else {
        System.out.println("Focus Lost");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM