[英]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
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.