[英]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.