在我的GUI中,我尝试显示其中包含其他元素的TabPane
。
调用特定场景的initialize-method时,我可以将所需数据添加到第一个Tab。
如何访问第二个并在那里添加数据?
当你在单个标签之间切换时是否有一个被调用的方法,或者是否可以通过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
答案 0 :(得分:1)
首先初始化tabpane,然后初始化所需的所有选项卡。您可以设置标题和内容,但不要忘记将所有标签添加到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
答案 1 :(得分:0)
好的,我不确定我是否理解这个问题。
如果您询问如何访问存储在Tab
的第二个TabPane
上的GUI元素,答案是:
TabPane
实际上只是一个简单的容器,所以如果你插入两个控件两个相同的Tab
(就FXML注入而言),你将它们插入两个独立的{{1} }。
我可以看到你在第二个标签上的FXML中创建了Tabs
,如:
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
上完全相同第一个smsHandyList
)。
这就是所谓的&#34; FXML注射&#34;。您可以查看post from Oracle如何将FXML与Java代码连接。