首页 > 解决方案 > JavaFX - 在使用选项卡时将 GUI 拆分为单独的类

问题描述

我正在尝试制作一个带有选项卡式 GUI 的程序,其中每个选项卡的内容都是它们自己的类。我基本上想做这里所做的事情,但是使用标签。仅仅是 Manager 类:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.stage.Stage;

public class Manager extends Application {

    private TabPane tabPane;
    private Tab dcTab;

    public Manager() {

        dcTab = new Tab();

        tabPane = new TabPane();

        DistributionCenter dcMenu = new DistributionCenter();

        dcTab.setText("Distribution Center");
        dcTab.setContent(dcMenu);
        tabPane.getTabs().add(dcTab);

    }

    @Override
    public void start(Stage primaryStage) throws Exception {

        Group root = new Group();

        Scene scene = new Scene(tabPane, 600, 500);

        DistributionCenter dcMenu = new DistributionCenter();
        root.getChildren().add(dcMenu);
        dcTab.setContent(dcMenu);

        primaryStage.setScene(scene);
        primaryStage.setTitle("909th Wing");

        primaryStage.show();

    }

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

这是我的 DistributionCenter 课程:

import javafx.scene.control.Button;
import javafx.scene.layout.Pane;

public class DistributionCenter extends Pane {

    private Button testBt1;

    public DistributionCenter() {

        Pane dcMenu = new Pane();

        testBt1 = new Button("Button");
        dcMenu.getChildren().addAll(testBt1);

        testBt1.setLayoutX(30);
        testBt1.setLayoutY(100);

    }
}

请注意,此时 DistributionCenter 的内容只是一个测试。

标签: javajavafx

解决方案


您永远不会将您的添加Button到实际DistributionCenter窗格中。相反,您正在Pane该类中创建一个新的并将按钮添加到它。

记住,DistributionCenter 一个Pane所以它有自己的孩子。您无需在其中创建新Pane的。

更新您的DistributionCenter类以仅配置自身:

public DistributionCenter() {

    testBt1 = new Button("Button");
    getChildren().addAll(testBt1);

}

这将解决您的问题,但除非您需要实现不同的行为,否则您永远不应该扩展一个类。如果您只是Node像这样配置 a,您应该只创建 a 的实例Pane并正确配置它。


推荐阅读