2016-05-23 9 views
0

私のGUIでは、他の要素を含むTabPaneを表示しようとしています。TabPane(JavaFX)を初期化する方法

特定のシーンの初期化メソッドを呼び出すときに、必要なデータを最初のタブに追加できます。私は二番目にアクセスし、そこにデータを追加するにはどうすればよい

? `

initializeメソッドから、それまでに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

答えて

0

さて、私は私が正しく質問を理解して確認していません。

あなたTabPaneの二Tabに保存されているGUI要素にアクセスする方法を求めているならば、答えは:あなたは2つのコントロール2と同じTabを挿入しますので、もし

TabPaneは、実際には単純なコンテナです(FXML注入の点で)同じものを2つの別々のTabsに挿入します。

私はあなたのような2つ目のタブの上にあなたの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への参照があります(TabsmsHandyListと全く同じです)。

これは「FXML注入」と呼ばれるものです。 FXMLとJavaコードとの接続方法はpost from Oracleで確認できます。

+0

最初に:はい、それは質問です:)事は次のとおりです。私は、initializeメソッドから2番目のペインのテーブルにアクセスすることはできません。そこにはnullpoint例外が発生しています。私はそれをコピーします。 – Master1114

+0

はい、FXML注入部品も含めてください – DVarga

+0

またはコントローラ全体を投稿する方が良いです。 – DVarga

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

+0

私はJavaFxコントローラクラスでSceneBuilderを使用しています。だから私は少し違うと思う?私は手動でタブで作業しないので、単に別のタブを呼び出すことはできません – Master1114

+0

ごめんなさい、私は恐れているシーンビルダーとの経験はあまりありません。こちらをご覧ください:http://docs.oracle.com/javafx/scenebuilder/1/user_guide/library-panel.htmおそらくそれはあなたを助けるでしょう。 – JC97

+0

FXMLファイルと現在のコントローラクラスを含むように質問を編集した場合、あなたができることをあなたに書くことができます:) – DVarga

関連する問題