如何初始化一个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代码。

+0

第一:是的,这是问题:)事情是:我不能只是从初始化方法访问第二个窗格上的表,我在那里得到一个空点异常。我会复制它。 – Master1114

+0

是的,那么请包括FXML注射部分也 – DVarga

+0

或更好地张贴您的整个控制器。 – DVarga

首先你初始化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

+0

我正在使用带有JavaFx控制器类的SceneBuilder。所以我觉得它对我有点不同?我没有手动使用标签,所以我不能只是简单地打电话给另一个标签 – Master1114

+0

对不起,我没有太多的经验,我很害怕scenebuilder。你可以看看这里:http://docs.oracle.com/javafx/scenebuilder/1/user_guide/library-panel.htm也许它会帮助你。 – JC97

+0

如果你编辑你的问题,包括你的FXML文件和当前控制器类,我可以给你写一个答案你可以做:) – DVarga