簡體   English   中英

如果按下鍵,則不會觸發用於鼠標交互的JavaFX事件

[英]JavaFX Events for Mouse Interactions are not triggered if Key is pressed

如果按下CTRL或SHIFT等修飾鍵,則JavaFX不會執行ActionEvent for ButtonCheckBox等事件。 據我所知,這種行為是在ButtonBehavior實現的(例如,請注意該類中以下方法中的表達式! keyDown ):

@Override public void mouseReleased(MouseEvent e) {
    // if armed by a mouse press instead of key press, then fire!
    final ButtonBase button = getControl();
    if (! keyDown && button.isArmed()) {
        button.fire();
        button.disarm();
    }
}

首先,我真的不明白這個的原因。 如果按下某個鍵,不觸發按鈕的目的是什么?

這是我的用例:我想實現一個可以正常檢查/取消選中的復選框。 它將切換模型中的某些狀態。 但它應該有一個額外的功能:如果用戶在用鼠標檢查/取消選中時按下某些鍵(如CTRL),則應在模型中設置一個名為“locked”或“protected”的附加標志,這將阻止狀態為被應用程序的其他一些邏輯覆蓋。

這應該給出一個關於用例的想法,但如果沒有,它對我的​​實際問題並不重要:即使用戶按下,我怎樣才能使CheckBox仍然可以切換(或按下Button )一個修飾鍵?

謝謝你的幫助!

這很奇怪,你可以自己實現它

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        VBox vBox = new VBox();
        vBox.setAlignment(Pos.CENTER);

        CheckBox checkBox = new CheckBox();
        checkBox.setOnMouseClicked(event -> {
            if(event.isControlDown()) {
                System.out.print("Control down click ");
                checkBox.setSelected(!checkBox.isSelected());
            }
            else
                System.out.print("Normal click ");

            System.out.println("Checked Status:"+checkBox.isSelected());
        });

        Button button = new Button("Button");
        button.setOnMouseClicked(event -> {
            if(event.isControlDown())
                System.out.println("Control down click");
            else
                System.out.println("Normal click");
        });

        vBox.getChildren().addAll(new Label("Click the box"),checkBox,button);


        primaryStage.setScene(new Scene(vBox));
        primaryStage.show();
    }

    public static void main(String[] args) { launch(args); }

}

CheckBox的輸出:

Normal click Checked Status:true
Normal click Checked Status:false
Control down click Checked Status:true
Control down click Checked Status:false

Button的輸出:

Normal click
Control down click

暫無
暫無

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

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