Java 使用键盘移动焦点故障

Java 使用键盘移动焦点故障,java,javafx,scroll,focus,Java,Javafx,Scroll,Focus,请帮忙。 情境:我们有很多按钮的VBox(我可以通过键盘上的箭头键上下滚动焦点),但它们不适合小表单,所以我需要垂直滚动。我使用滚动窗格-最终一切都变得很好,除了移动焦点。当我按下上/下箭头键时,焦点静止不动,但会影响滚动。 我需要使用ScrollPane禁用按键滚动(仅使用鼠标!),并通过上/下箭头键启用移动焦点。你能帮帮我吗,我怎么做 非常感谢 这是我的密码 import javafx.application.Application; import javafx.event.ActionEv

请帮忙。 情境:我们有很多按钮的VBox(我可以通过键盘上的箭头键上下滚动焦点),但它们不适合小表单,所以我需要垂直滚动。我使用滚动窗格-最终一切都变得很好,除了移动焦点。当我按下上/下箭头键时,焦点静止不动,但会影响滚动。 我需要使用ScrollPane禁用按键滚动(仅使用鼠标!),并通过上/下箭头键启用移动焦点。你能帮帮我吗,我怎么做

非常感谢

这是我的密码

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ScrollPane;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TestJavaFXScrollPane extends Application {
@Override
public void start(Stage primaryStage) {
    Button btn0 = new Button("Btn0");
    btn0.setOnKeyPressed((event) -> {
        System.out.println("btn.KeyPressed; Code: " + event.getCode());
    });
    Button btn1 = new Button("Btn1");
    Button btn2 = new Button("Btn2");
    Button btn3 = new Button("Btn3");

    VBox root = new VBox();
    root.getChildren().addAll(btn0, btn1, btn2, btn3);

    ScrollPane scrollPane = new ScrollPane(root);
    scrollPane.setOnKeyPressed(event -> {
        //if(event.getCode() == KeyCode.DOWN || event.getCode() == KeyCode.UP)
            //event.consume(); // Tried to fix issue, but without result ((
    });

    Scene scene = new Scene(scrollPane, 100, 80);

    primaryStage.setTitle("Hello World!");
    primaryStage.setScene(scene);
    primaryStage.show();
}


public static void main(String[] args) {
    launch(args);
}
}
我自己找到了解决方案(正确吗?)

类MyEventHandler实现EventHandler{
@凌驾
公共无效句柄(KeyEvent事件){
if(event.getCode()==KeyCode.UP){
对象t0=event.getSource();
如果(!(t0 instanceof按钮))
返回;
((BehaviorSkinBase)((按钮)t0.getSkin()).getBehavior().traversePrevious();
}else if(event.getCode()==KeyCode.DOWN){
对象t0=event.getSource();
如果(!(t0 instanceof按钮))
返回;
((BehaviorSkinBase)((按钮)t0.getSkin()).getBehavior().traverseNext();
}
}
公共静态无效处理(按钮…基站){
if(btns==null&&btns.length==0)返回;
用于(按钮el:BTN){
el.setOnKeyPressed(新MyEventHandler());
}
}
}

class MyEventHandler implements EventHandler<KeyEvent> {
@Override
public void handle(KeyEvent event) {
    if(event.getCode() == KeyCode.UP) {
            Object t0 = event.getSource();
            if (!(t0 instanceof Button))
                return;
            ((BehaviorSkinBase) ((Button)t0).getSkin()).getBehavior().traversePrevious();

        } else if(event.getCode() == KeyCode.DOWN) {
            Object t0 = event.getSource();
            if (!(t0 instanceof Button))
                return;
            ((BehaviorSkinBase) ((Button)t0).getSkin()).getBehavior().traverseNext();

        }
}

public static void ProcessBurrons(Button... btns) {
    if(btns == null && btns.length == 0) return;
    for(Button el : btns) {
        el.setOnKeyPressed(new MyEventHandler());
    }
}