![](/img/trans.png)
[英]how to apply 2 events(both mouse click or key pressed) for a button in javafx
[英]JavaFX Events for Mouse Interactions are not triggered if Key is pressed
如果按下CTRL或SHIFT等修飾鍵,則JavaFX不會執行ActionEvent
for Button
或CheckBox
等事件。 據我所知,這種行為是在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.