如何初始化一个TabPane(JavaFX)
在我的GUI中,我尝试显示一个TabPane
与其中的其他元素。如何初始化一个TabPane(JavaFX)
当调用特定场景的初始化方法时,我可以将所需的数据添加到第一个选项卡。
如何访问第二个,有添加数据?`
是否有当u单个标签之间切换,或者被调用是否有可能将其从初始化方法的方法?
//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());
}
}
所以,这是控制器类。就这样,我可以工作obv。与第一个选项卡窗格(默认情况下显示时,你看它)。
FXML文件:http://pastebin.com/MQ0C8EWD
好吧,我不知道我理解这个问题正确。
如果你问如何访问存储在您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
完全相同)。
这就是所谓的“FXML注入”。你可以检查这个post from Oracle如何连接FXML和Java代码。
首先你初始化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
我正在使用带有JavaFx控制器类的SceneBuilder。所以我觉得它对我有点不同?我没有手动使用标签,所以我不能只是简单地打电话给另一个标签 – Master1114
对不起,我没有太多的经验,我很害怕scenebuilder。你可以看看这里:http://docs.oracle.com/javafx/scenebuilder/1/user_guide/library-panel.htm也许它会帮助你。 – JC97
如果你编辑你的问题,包括你的FXML文件和当前控制器类,我可以给你写一个答案你可以做:) – DVarga
第一:是的,这是问题:)事情是:我不能只是从初始化方法访问第二个窗格上的表,我在那里得到一个空点异常。我会复制它。 – Master1114
是的,那么请包括FXML注射部分也 – DVarga
或更好地张贴您的整个控制器。 – DVarga