Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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
按下上下箭头时,Java FX无法识别KeyCode.UP或KeyCode.Down(MacBook Pro 18-Mojave 10.14.5)_Java_Javafx - Fatal编程技术网

按下上下箭头时,Java FX无法识别KeyCode.UP或KeyCode.Down(MacBook Pro 18-Mojave 10.14.5)

按下上下箭头时,Java FX无法识别KeyCode.UP或KeyCode.Down(MacBook Pro 18-Mojave 10.14.5),java,javafx,Java,Javafx,我目前正在学习Java,正在使用JavaFX进行事件驱动编程。该程序制作一个圆,并通过几种不同的方法(按钮、鼠标按钮、向上和向下箭头)增加其大小 按钮和鼠标单击可以正常工作,但上下箭头不行。似乎当我按下它们时,没有收到任何键码。我试过把这个换成其他的键,效果很好 实际上,我从书中复制了这个程序用于练习,它与我的代码相同 我在Mojave 10.14.5上使用MacBook Pro 18。Java 10,IntelliJ社区版2019.1 代码如下,如有任何帮助,将不胜感激 package tes

我目前正在学习Java,正在使用JavaFX进行事件驱动编程。该程序制作一个圆,并通过几种不同的方法(按钮、鼠标按钮、向上和向下箭头)增加其大小

按钮和鼠标单击可以正常工作,但上下箭头不行。似乎当我按下它们时,没有收到任何键码。我试过把这个换成其他的键,效果很好

实际上,我从书中复制了这个程序用于练习,它与我的代码相同

我在Mojave 10.14.5上使用MacBook Pro 18。Java 10,IntelliJ社区版2019.1

代码如下,如有任何帮助,将不胜感激

package testing2;

import javafx.application.Application; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.input.KeyCode; import javafx.scene.input.MouseButton; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.stage.Stage;

public class ControlCircleWithMouseAndKey extends Application {
    private CirclePane circlePane = new CirclePane();

    @Override
    public void start(Stage primaryStage) {
        //hold 2 buttons in an Hbos
        HBox hBox = new HBox();
        hBox.setSpacing(10);
        hBox.setAlignment(Pos.CENTER);

        Button btEnlarge = new Button("Enlarge");
        Button btShrink = new Button("Shrink");
        hBox.getChildren().addAll(btEnlarge, btShrink);

        //Create and register button click handlers
        btEnlarge.setOnAction(e -> circlePane.enlarge());
        btShrink.setOnAction(e -> circlePane.shrink());

        BorderPane borderPane = new BorderPane();
        borderPane.setCenter(circlePane);
        borderPane.setBottom(hBox);
        borderPane.setAlignment(hBox, Pos.CENTER);

        Scene scene = new Scene(borderPane, 200, 200);
        primaryStage.setTitle("Change Circle");
        primaryStage.setScene(scene);
        primaryStage.show();

        //Register the mouse clicks enlarge and shrink
        circlePane.setOnMouseClicked(e -> {
            if (e.getButton() == MouseButton.PRIMARY) {
                circlePane.enlarge();
            } else if (e.getButton() == MouseButton.SECONDARY) {
                circlePane.shrink();
            }
        });

        //Register keys to englarge and shrink
        scene.setOnKeyPressed(e -> {
            if (e.getCode() == KeyCode.UP) {
                circlePane.enlarge();
            } else if (e.getCode() == KeyCode.DOWN) {
                circlePane.shrink();
            } else {
                System.out.println(e.getCode());
            }
        });

    } }

class CirclePane extends StackPane {
    private Circle circle = new Circle(50);

    public CirclePane() {
        getChildren().add(circle);
        circle.setStroke(Color.BLACK);
        circle.setFill(Color.WHITE);
    }

    public void enlarge() {
        circle.setRadius(circle.getRadius() + 2);
    }

    public void shrink() {
        circle.setRadius(circle.getRadius() > 2 ? circle.getRadius() - 1 : circle.getRadius());
    } }

您已使用“场景”注册按键。这不应该是“边框窗格”(我想这完全取决于焦点)?

您已经使用“场景”来注册按键。这不应该是“borderPane”吗(我想这完全取决于焦点)?

我也尝试过borderPane,结果相同“borderPane.requestFocus();”怎么样?(在“primaryStage.show();”之后)成功了,谢谢!你知道为什么现场不起作用吗?当我切换到另一个键时,我可以增加或减少大小。我不知道。我试过你的代码(win10-64b),它运行得很好,没有任何修改,所以我对你在Mac上遇到的问题一无所知。无论如何,很高兴我能帮上忙:)我也尝试了borderPane,结果也是一样的‘borderPane.requestFocus();’怎么样?(在“primaryStage.show();”之后)成功了,谢谢!你知道为什么现场不起作用吗?当我切换到另一个键时,我可以增加或减少大小。我不知道。我试过你的代码(win10-64b),它运行得很好,没有任何修改,所以我对你在Mac上遇到的问题一无所知。无论如何,很高兴我能帮忙:)