簡體   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