【问题标题】:First Button in a ButtonBar is always focused?ButtonBar 中的第一个按钮始终保持焦点?
【发布时间】:2021-05-13 07:38:48
【问题描述】:

我目前正在开发一个JavaFX 应用程序,在那里我使用了带有一些按钮的ButtonBar。当我运行程序时,第一个 Button 始终是焦点。如何禁用该设置?

P.S.:我使用了一些 CSS 代码来更改默认外观,棕色框表示按钮已聚焦。

【问题讨论】:

  • 好奇:你还想关注什么? bar 是 ui 中唯一的节点,还是(位置上)第一个节点?

标签: button javafx focus scenebuilder buttonbar


【解决方案1】:

您可以使用otherNode.requestFocus() 将焦点从按钮上移开:

请求这个节点获得输入焦点,并且这个节点的 顶级祖先成为焦点窗口。有资格 接收焦点,节点必须是场景的一部分,它和它的所有 祖先必须是可见的,并且不能被禁用。如果这个节点 符合条件,这个函数会使其成为这个场景的“焦点” owner”。每个场景最多有一个焦点拥有者节点。焦点拥有者 然而,实际上不会有输入焦点,除非场景 属于既可见又活跃的舞台 (docs)。

就像这个例子:


import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBar;
import javafx.stage.Stage;

import java.util.stream.IntStream;

public class App extends Application {

    @Override
    public void start(Stage stage) {
        // Create controls:
        ButtonBar buttonBar = new ButtonBar();
        IntStream.range(0, 3).forEach(i -> buttonBar.getButtons().add(new Button("Button " + i)));
        
        // This takes away the focus from the button:
        Platform.runLater(buttonBar::requestFocus); // (Does not have to be the buttonBar itself)
        
        // Prepare and show stage:
        stage.setScene(new Scene(buttonBar));
        stage.show();
    }

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 2015-08-11
    • 1970-01-01
    相关资源
    最近更新 更多