Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX奇怪的菜单加速器行为_Java_Menu_Javafx_Keyboard Shortcuts_Javafx 8 - Fatal编程技术网

JavaFX奇怪的菜单加速器行为

JavaFX奇怪的菜单加速器行为,java,menu,javafx,keyboard-shortcuts,javafx-8,Java,Menu,Javafx,Keyboard Shortcuts,Javafx 8,我注意到JavaFX(系统)菜单上的菜单加速器有一个非常奇怪的行为。有些组合键根本不起作用,而另一些组合键则被解释为错误的组合键 例如,当您使用CMD+CLEAR键作为加速器时,它会被更改为CMD+Page Down键(在菜单文本和对键盘事件的实际响应中)。“-”(减号)键根本不起作用,尽管CMD+-在菜单中显示得很好,但当您按下这些键时,它永远不会被触发。另一方面,当您添加ALT键(即,按下CMD+ALT+-)时,会触发CMD事件(但不会触发CMD+ALT+-one) 知道发生了什么吗,或者这

我注意到JavaFX(系统)菜单上的菜单加速器有一个非常奇怪的行为。有些组合键根本不起作用,而另一些组合键则被解释为错误的组合键

例如,当您使用CMD+CLEAR键作为加速器时,它会被更改为CMD+Page Down键(在菜单文本和对键盘事件的实际响应中)。“-”(减号)键根本不起作用,尽管CMD+-在菜单中显示得很好,但当您按下这些键时,它永远不会被触发。另一方面,当您添加ALT键(即,按下CMD+ALT+-)时,会触发CMD事件(但不会触发CMD+ALT+-one)

知道发生了什么吗,或者这是一个(知道的)错误

我创建了下面的示例程序来说明这一点。 注意:我在Mac电脑上

package menuaccelerator;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TextArea;
import javafx.scene.input.KeyCombination;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class MenuAccelerator extends Application {

    // Counter for the event number
    int eventNr = 0;

    @Override
    public void start(Stage primaryStage) {
        // Text Area for displaying the events
        TextArea events = new TextArea();
        events.setEditable(false);
        events.setOnKeyPressed((e) -> {
            System.out.println("Key Event(" + ++eventNr + "): " + e);
            events.appendText((eventNr == 1 ? "" : "\n") + "KeyCode(" + eventNr + "): " + e.getCode());
            e.consume();
        });

        // Menu Bar & Menu
        MenuBar menuBar = new MenuBar();
        menuBar.setUseSystemMenuBar(true);
        Menu menu = new Menu("Accelerator Test");
        menuBar.getMenus().add(menu);

        // Build menu
        for (String item : new String[]{"Shortcut+PLUS", "Shortcut+Alt+PLUS",
                                        "Shortcut+MINUS", "Shortcut+Alt+MINUS",
                                        "Shortcut+PAGE__UP", "Shortcut+Alt+PAGE__UP",
                                        "Shortcut+PAGE__DOWN", "Shortcut+Alt+PAGE__DOWN",
                                        "Shortcut+CLEAR"}) {
            MenuItem menuItem = new MenuItem(item);
            menuItem.setAccelerator(KeyCombination.keyCombination(item));
            menuItem.setOnAction((ActionEvent e) -> {
                System.out.println("Menu Event(" + ++eventNr + "): " + e);
                events.appendText((eventNr == 1 ? "" : "\n") + "Menu Event(" + eventNr + "): " + ((MenuItem) e.getSource()).getText());
                e.consume();
            });
            menu.getItems().add(menuItem);
        }

        // Create scene
        StackPane root = new StackPane();
        VBox vbox = new VBox(10);
        vbox.setAlignment(Pos.CENTER);
        vbox.getChildren().add(events);
        root.getChildren().add(vbox);
        root.getChildren().add(menuBar);
        Scene scene = new Scene(root, 300, 200);

        // Display scene
        primaryStage.setTitle("Accelerator Test");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

}

彼此彼此。在Mac上也是如此。负不起作用,正起作用。如果我尝试减法,它会在菜单中变为“M”。