【问题标题】:JavaFX: How do I achieve 'no default focused button'JavaFX:如何实现“无默认焦点按钮”
【发布时间】:2019-02-13 23:47:49
【问题描述】:

我是 JavaFX 新手,我正在将我的第一个应用程序制作成一个简单的刽子手游戏,因为这是我之前在摇摆中做过的事情。

在游戏中,我构建了一个键盘,但我不知道如何让我的所有按钮在游戏开始时“不聚焦”,所以看起来像这样

注意“Q”是如何变暗的。我考虑过一种简单的方法,比如在场景外有一个按钮,它什么都不做,只是作为默认的焦点按钮,但我真的很想知道正确的方法。我所有的研究都只告诉了如何使特定按钮成为焦点。

非常感谢任何愿意提供帮助的人。

【问题讨论】:

  • 默认行为是第一个获得焦点的焦点可遍历节点。您当然可以使按钮不可聚焦,但我想这不是您想要做的吗?
  • 不完全是(我必须查一下),但感谢您的参考。我仍在学习不同的工具和选项。
  • 我没有尝试过,但我猜将焦点放在根节点上会达到你想要的结果。

标签: java button javafx


【解决方案1】:

我认为@Sedrick 提到的是正确的。默认情况下,您可以只关注任何布局节点。

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class DefaultFocusDemo extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        VBox root = new VBox();
        root.setAlignment(Pos.CENTER);
        root.setSpacing(20);
        Scene sc = new Scene(root, 500, 500);
        primaryStage.setScene(sc);
        primaryStage.show();


        ToggleButton btn1 = new ToggleButton("Button 1");
        ToggleButton btn2 = new ToggleButton("Button 2");
        ToggleButton btn3 = new ToggleButton("Button 3");
        ToggleButton btn4 = new ToggleButton("Button 4");

        HBox hb1 = new HBox();
        hb1.setAlignment(Pos.CENTER);
        hb1.getChildren().addAll(btn1, btn2);

        HBox hb2 = new HBox();
        hb2.setAlignment(Pos.CENTER);
        hb2.getChildren().addAll(btn3, btn4);

        root.getChildren().addAll(hb1, hb2);

        hb1.requestFocus();
    }
}

【讨论】:

  • 我要求关注根场景,结果证明这是我尝试过的最优雅的解决方案。感谢您的帮助。
【解决方案2】:

你的想法是对的。创建一个屏幕外按钮并确保它具有起始焦点。

【讨论】:

  • 也应该循环通过该节点,如果您将焦点移动到下一个节点,并关注最后一个按钮......
猜你喜欢
  • 2015-06-14
  • 2012-02-05
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 2021-10-06
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多