gpt4 book ai didi

JavaFX ContextMenu 加速器从错误的选项卡触发

转载 作者:行者123 更新时间:2023-12-02 11:53:46 26 4
gpt4 key购买 nike

我有一个带有两个选项卡的 TabPane,每个选项卡都有一个 TableView,其中有一个上下文菜单。这两个上下文菜单有重复的加速器,但我希望只有当前选定的选项卡才会响应。但发生的情况是,只有最后添加的 Tab 似乎获得了事件,即使它没有被选择。下面是完整的示例代码:

package sample;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.KeyCombination;
import javafx.stage.Stage;

public class Main extends Application {

@Override
public void start(Stage primaryStage) throws Exception{
Tab t1 = new Tab("Tab 1");
TableView<Void> tv1 = new TableView<>();
t1.setContent(tv1);
MenuItem mi1 = new MenuItem("Action 1");
mi1.setAccelerator(KeyCombination.valueOf("F3"));
mi1.setOnAction(event->System.out.println("Action 1!"));
ContextMenu ctx1 = new ContextMenu(mi1);
tv1.setContextMenu(ctx1);

Tab t2 = new Tab("Tab 2");
TableView<Void> tv2 = new TableView<>();
t2.setContent(tv2);
MenuItem mi2 = new MenuItem("Action 2");
mi2.setAccelerator(KeyCombination.valueOf("F3"));
mi2.setOnAction(event->System.out.println("Action 2!"));
ContextMenu ctx2 = new ContextMenu(mi2);
tv2.setContextMenu(ctx2);

TabPane tabPane = new TabPane(t1, t2);
tabPane.setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE);
primaryStage.setScene(new Scene(tabPane));
primaryStage.show();
}


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

我期待“行动 1!”选择选项卡 1 和“操作 2!”时打印选择选项卡 2 时打印,但实际上是“Action 2!”无论选择哪个选项卡都会打印。我该如何解决这个问题,以便根据当前可见的选项卡(TableView)执行正确的操作?

最佳答案

我猜你已经遇到过https://bugs.openjdk.java.net/browse/JDK-8088068 (请参阅那里的解决方法)。 JavaFX 并没有真正准备好在多个 MenuItem 中安装相同的加速器。

关于JavaFX ContextMenu 加速器从错误的选项卡触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34198022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com