JavaFX ScrollPane 禁用箭头键滚动

标签 java javafx scroll focus scrollpane

请您提供以下情况的建议: 我里面有 ScrollPane 和 GridPane。在 GridPane 中我有很多按钮。当我用鼠标聚焦一个按钮并尝试用箭头键移动焦点时,焦点仍然停留在同一个按钮上,我只看到 ScrollPane 滚动。

如何禁用 ScrollPane 的箭头键滚动并将该事件发送到我的子按钮。我尝试做一些事情,例如:

ScrollPane sp = new ScrollPane() {
        @Override
        public void requestFocus(){}
    };
    sp.addEventFilter(KeyEvent.ANY, (event) -> {
        if(event.getCode() == KeyCode.DOWN) {
            event.consume();
            javafx.event.Event.fireEvent(mainGrid, event);
        }
    });

但不幸的是,这并没有奏效。

我还能做什么? 非常感谢, 罗马

最佳答案

我改变了您使用事件的方式,这不会阻止按钮获取关键事件,而且您遍历节点的方式通常是使用选项卡按钮,但我不知道您实现了什么。当焦点位于按钮上时,这将打印出您按下的每个键,而无需滚动

public class Main extends Application {

    @Override
    public void start(Stage stage) {
        VBox scrollPaneVbox = new VBox();

        Button button = new Button("Button");
        button.setOnKeyPressed(event -> System.out.println(event.getCode().toString()));

        ScrollPane scrollPane = new ScrollPane(scrollPaneVbox);
        scrollPane.setPannable(true);
        scrollPane.setPrefSize(150,150);
        scrollPane.setOnKeyPressed(event -> {
            if(event.getCode() == KeyCode.DOWN || event.getCode() == KeyCode.UP)
                event.consume();
        });

        int i = 0;
        while (i++!=21)
            scrollPaneVbox.getChildren().add(new Label("Label i:"+i));

        scrollPaneVbox.getChildren().add(button);

        Scene scene = new Scene(scrollPane, 200,150);

        stage = new Stage();
        stage.setScene(scene);
        stage.showAndWait();
    }



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

为什么我认为这不起作用是因为事件首先进入滚动 Pane ,然后从那里传递到按钮,当您过滤事件时,它不会传递事件。但我没有事实支持这一点,如果其他人想详细说明或告诉我我错了,我将删除此解释

关于JavaFX ScrollPane 禁用箭头键滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51189527/

相关文章:

放大时 HTML/CSS Div 不会滚动

javafx - ListChangeListener.Change : how to properly handle updated and permutated items

java - 如何在 JavaFX 应用程序中加载的 FXML 文件中显示元素?

java - HashMap.put 没有按预期工作

java - 为什么我的@FunctionalInterface 使用两种方法没有编译错误?

JavaFX 的 TableView 具有突出显示文本和省略号功能

OS X 上的 Emacs 滚动错误

css - 在 iPhone 上滚动我的网站时出现额外的 "Search web"

java - Java GUI 中的 YouTube 播放器

java - Postman 请求不起作用 - Rest APi 实现