【问题标题】:JavaFX - Splitting GUI into separate classes while using tabsJavaFX - 在使用选项卡时将 GUI 拆分为单独的类
【发布时间】:2021-03-27 23:30:45
【问题描述】:

我正在尝试制作一个带有选项卡式 GUI 的程序,其中每个选项卡的内容都是它们自己的类。我基本上想做here 所做的事情,但使用标签。仅仅是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 的内容只是一个测试。

【问题讨论】:

  • 好的,这就是你想要做的;你的问题是什么?到目前为止,您尝试过什么?您在哪里卡住了?
  • @Zephyr 我遇到的问题是有一个选项卡,但没有来自 DistributionCenter 的内容。我已经从提供给链接问题的答案中尝试了这两种方法,我认为问题出在我对标签的使用上。
  • @Zephyr 我不确定您所说的“dcTab 不是‘标签’”是什么意思。那么'dcTab = new Tab()' 会做什么呢?
  • 哎呀。我不确定我在读什么……但是你为什么要创建一个新的DistributionCenter 并设置两次选项卡内容?
  • @Zephyr 这是我为使程序正常工作而进行的大量实验的结果。移动时忘记删除多余的代码(我不记得哪个是原始代码,哪个是新代码)。

标签: java javafx


【解决方案1】:

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

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

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

public DistributionCenter() {

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

}

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

【讨论】:

    猜你喜欢
    • 2014-07-19
    • 2013-05-01
    • 2016-03-17
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多