繁体   English   中英

如何初始化TabPane(JavaFX)

[英]How to initialize a TabPane (JavaFX)

在我的GUI中,我尝试显示一个TabPane及其中的其他元素。

当调用特定场景的初始化方法时,我可以将所需的数据添加到第一个Tab中。

如何访问第二个数据库并在那里添加数据?

u在单个选项卡之间切换时是否有调用该方法的方法,或者可以从initialize方法转到该方法?

//all the fields

@FXML
private void initialize() {
    smsHandynumberColumn.setCellValueFactory(cellData -> cellData.getValue().numberProperty());
    smsHandyproviderColumn.setCellValueFactory(cellData -> cellData.getValue().providerProperty());
    displayHandyDetails(null);
    smsHandyList.getSelectionModel().selectedItemProperty()
            .addListener((observable, oldValue, newValue) -> displayHandyDetails(newValue));

//  providernameColumn.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
//  provideramountColumn.setCellValueFactory(cellData -> cellData.getValue().sizeProperty());
}

@FXML
private void displayHandyDetails(SmsHandy handy) {
    if (handy != null) {
        handyNumberLabel.setText(handy.getNumber());
        providerLabel.setText(handy.getProvider().getName());
        registerLabel.setText(handy.getDate().toString());
        receivedLabel.setText(Integer.toString(handy.getReceivedList().size()));
        sentLabel.setText(Integer.toString(handy.getSentList().size()));
        if (handy instanceof PrepaidSmsHandy) {
            balanceLabel.setText(Integer.toString(handy.getProvider().getCreditForSmsHandy(handy.getNumber()))
                    + " Cent on account");
            typeLabel.setText("Prepaid");
        } else {
            balanceLabel.setText(
                    Integer.toString(((TariffPlanSmsHandy) handy).getRemainingFreeSms()) + " free SMS left");
            typeLabel.setText("Tariff-Plan");
        }
    } else {
        handyNumberLabel.setText(" ");
        providerLabel.setText(" ");
        registerLabel.setText(" ");
        typeLabel.setText(" ");
        balanceLabel.setText(" ");
        receivedLabel.setText(" ");
        sentLabel.setText(" ");
    }
}

public void setMainApp(MainApp mainApp) {
    this.mainApp = mainApp;
    smsHandyList.setItems(mainApp.getHandyList());
}

}

因此,这是控制器类。 这样,我就可以工作。 与第一个标签窗格(当您查看时默认显示)。

FXML文件: http//pastebin.com/MQ0C8EWD

首先,初始化选项卡,然后初始化所需的所有选项卡。 您可以设置标题和内容,但不要忘记将所有选项卡添加到tabPane中。

 TabPane tabPane = new TabPane();
 Tab tab1 = new Tab();
 tab.setText("tab 1");
 tab.setContent(new Rectangle(200,200, Color.LIGHTSTEELBLUE));
 Tab tab2 = new Tab();
 tab.setText("tab 2");
 tab.setContent(new Rectangle(200,200, Color.RED));
 tabPane.getTabs().addAll(tab1, tab2);

详细信息: https : //docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TabPane.html

好吧,我不确定我是否正确理解了这个问题。

如果您询问如何访问存储在TabPane第二个Tab的GUI元素,则答案是:

TabPane实际上只是一个简单的容器,因此,如果您插入两个控件,则两个相同的Tab (就FXML注入而言)是相同的,将它们插入两个单独的Tabs

我可以看到您在FXML的第二个选项卡上创建了一个TableView ,如下所示:

<TableView fx:id="providerList" layoutX="-11.0" layoutY="14.0" prefHeight="264.0" prefWidth="250.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">

因此,如果您说:

@FXML TableView providerList;

在控制器的类主体中,然后在控制器的initialize方法中,您将对该TableView进行引用(与您对第一个Tab上的smsHandyList所做的操作smsHandyList )。

这就是所谓的“ FXML注入”。 您可以从Oracle查看此文章如何将FXML与Java代码连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM