JavaFX中有多个默认按钮

use*_*276 4 java javafx button

我有一个JavaFX应用程序,tabPane中有2个选项卡.我希望每个标签都有一个默认按钮(一个defaultButton ="true"的按钮).但是,只有第一个选项卡中的按钮会对按下Enter键做出反应.第二个选项卡中的按钮忽略按Enter键.

假设:Oracle 文档说明:

如果场景中没有其他节点使用按钮,则默认按钮是接收键盘VK_ENTER按钮的按钮.

因此,我猜问题是两个按钮都在一个场景中.你知道如何在JavaFX中获得2个标签,每个标签都有一个有效的默认按钮吗?

Jam*_*s_D 5

只能有一个默认按钮:您希望当前所选选项卡中的按钮成为默认按钮.只需将侦听器添加到每个选项卡的selected属性,并将相应的按钮设置为默认按钮,或使用绑定实现相同:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class MultipleDefaultButtons extends Application {

    @Override
    public void start(Stage primaryStage) {
        TabPane tabPane = new TabPane();
        tabPane.getTabs().addAll(createTab("Tab 1"), createTab("Tab 2"));
        primaryStage.setScene(new Scene(tabPane, 400, 400));
        primaryStage.show();
    }

    private Tab createTab(String text) {
        Tab tab = new Tab(text);
        Label label = new Label("This is "+text);
        Button ok = new Button("OK");

        ok.setOnAction(e -> System.out.println("OK pressed in "+text));

        VBox content = new VBox(5, label, ok);
        tab.setContent(content);

        ok.defaultButtonProperty().bind(tab.selectedProperty());

        return tab ;
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 直接绑定属性会不会更容易,比如`ok.defaultButtonProperty().bind(tab.selectedProperty())`? (4认同)