JavaFX中的多个默认按钮

4
我有一个JavaFX应用程序,其中有一个tabPane中的2个选项卡。我希望每个选项卡都有一个默认按钮(具有defaultButton="true"属性)。然而,只有第一个选项卡中的按钮会响应Enter键按下事件。第二个选项卡中的按钮忽略了Enter键按下事件。 假设:Oracle documentation指出:
“如果场景中没有其他节点使用,则默认按钮是接收键盘VK_ENTER按键的按钮。”
因此,我猜问题在于两个按钮位于同一场景中。您知道如何在JavaFX中获得2个选项卡,每个选项卡都有一个有效的默认按钮吗?
1个回答

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);
    }
}

4
直接绑定属性是否更简单,比如ok.defaultButtonProperty().bind(tab.selectedProperty()) - VGR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接