2016-10-12 6 views
0

私は13個のタブを持ち、13個のタブのそれぞれに13個のテーブルビューを持ち、それぞれにボタンやラベルなどのいくつかのコンポーネントタブTabpane内にあるinturnのタブ内にあるtableviewオブジェクトを取得する方法Javafx

特定のタブからテーブルビューを選択してtableviewオブジェクトを取得したいとします。 フォーカスがテーブルビューになるような場合、どのタブから来ているのかを知ることができ、メソッド内で特定のtableviewオブジェクトを使用できるようになります。

同じようなタスクを実行するメソッドがあるので、タブビューに応じてtableviewが変わるだけです。私はtableviewsを取得できますが、コード化する必要はありません。しかし、問題はtabpane dosent上のタブは、それもラベルボタンを持っているtableviewを持っています。どのようにextactをフェッチする私は私が正確に何をしたいbeacuseとしてさらに移動する方法はわからない私は同じ唯一のテーブルビューのタブに応じて変更するタスクを行うメソッドを持っているようですので、私はtableview objを得ることができます各タブの13のメソッドをコード化する必要はありません。しかし、問題はtabpane dosent上のタブは、それもラベルボタンを持っているtableviewを持っています。 extactノードをフェッチする方法。

タブとタブペインの背後にあるロジックは、fxmlコンポーネントです。私はアプリケーションを開発するためにfxmlコンポーネントを使用しています。

例えば: - businessEventreportは、テーブルのテーブルビューで、ここで

Set<Report> selection = new HashSet<Report>(businessEventReport.getSelectionModel().getSelectedItems()); 

、私はタブの特定のテーブルビューに着目し、特定のテーブルビューを取得したいです。

どうすればいいですか?

私は

SingleSelectionModel<Tab> selectionModel = tabpane.getSelectionModel(); 
    selectionModel.getSelectedItem().getContent(); 

を使用してタブを取得することができますが、私はそれの後に立ち往生しています。

+0

正しいことをしているようです。「getContent(); 'はあなたにTableViewを返します。 – GOXR3PLUS

+0

私はちょうど私が正確に欲しいものをbeacuseとしてさらに移動する方法はわかりませんia私は同じテーブルビューのタブに応じて変更するタスクを行うメソッドを持っているような私はtableviewsを得ることができる場合は私はする必要はありませんコード13の方法。しかし、問題はtabpane dosent上のタブは、それもラベルボタンを持っているtableviewを持っています。 extactノードを取得する方法。 –

+0

質問に言及されていないHm。すべてのタブには、TableViewを含むいくつかのコントロールを含むレイアウトが含まれています。各タブレイアウトはfxmlまたはプレーンJavaコードを使用して作成されていますか?レイアウト(またはそれを拡張する)とそのコンポーネント – GOXR3PLUS

答えて

1

解決策の1つは、各TableViewに識別子を割り当てることです。この 識別子は、ルックアップメソッドを使用して、各タブ(またはシーン全体)のコントロールセットの中からTableViewを検出するために使用されます。

各TableViewの識別子を設定するには、Node.setId methodを使用します。

tableView.setId("MyTable") 

TabPaneからTableViewを見つけるには、Node.lookup methodを使用します。

Tab selectedTab = tabPane.getSelectionModel().getSelectedItem() 
Node selectedContent = selectedTab.getContent() 
TableView selectedTable = selectedContent.lookup("#MyTable") 

ルックアップメソッドは、ルックアップの実行に使用されたノードの子を検索します。これにより、各TableViewに一意の識別子を割り当てたり、TabPane自体からの参照を許可したり、すべて同じ識別子を割り当てたり、親タブを使用してTableViewを検出することができます(上記の例を参照)。

ルックアップ方式では、CSSセレクタを使用してコントロールを検索し、識別子が必須ではないようにします。代わりの方法として、TabPaneとTableViewのクラスタイプと状態を使用してセレクタを作成する方法があります。次のようなもの(未テスト)。

selectedContent.lookup(".tab-pane > .tab:selected > .table-view") 
+0

偉大ブレアは ありがとう、これは私が探していたものである私のLOC、あなたが テーブルビューselectedTable =(テーブルビュー)selectedContent.lookup(「#MyTableという」)のようにそこ の上に型キャストを追加する必要がただ一つの微調整を保存しました –

関連する問題