私はこの問題を尋ねる前にどこでも解決策を探しました。既に存在する場合は、報告してください。実際にJavaFX、タブ間のパラメータを渡すコントローラ
私はこのような状況があります:すべてのための
TabLayout.fxml
<JFXTabPane fx:id="tabbedPane" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" prefWidth="500.0" tabClosingPolicy="UNAVAILABLE" tabMinWidth="100.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.TAB.TabController" stylesheets="@tab.css">
<tabs>
<Tab id="anagrafeTab" closable="false" text="Anagrafe">
<content>
<fx:include fx:id="anagrafeL" source="/application/Anagrafe/AnagrafeLayout.fxml"/>
</content>
</Tab>
<Tab id="visiteTab" closable="false" text="Visite">
<content>
<fx:include fx:id="visiteL" source="/application/Visite/VisiteLayout.fxml"/>
</content></Tab>
<Tab id="latteTab" closable="false" text="Produzione Latte">
<content>
<fx:include fx:id="latteL" source="/application/Latte/LatteLayout.fxml"/>
</content>
</Tab>
<Tab id="partiTab" closable="false" text="Parti" >
<content>
<fx:include fx:id="partiL" source="/application/Parti/PartiLayout.fxml"/>
</content>
</Tab>
</tabs>
</JFXTabPane>
レイアウト "が含まれる":
AnagrafeLayout.fxml
私がモデルとすべてのレイアウトのためのコントローラが、ユニークな発信者を持っているよりも
PartiLayout.fxml
LatteLayout.fxml
VisiteLayout.fxml
public class Tab {
public Tab() {
inizializza();
}
private void inizializza() {
try {
Stage stage = new Stage();
stage.setTitle("Dati");
stage.getIcons().add(new Image(getClass().getResourceAsStream("insert.png")));
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("TabLayout.fxml"));
JFXTabPane root = (JFXTabPane) loader.load();
Scene scene = new Scene(root,660,430);
stage.setScene(scene);
stage.show();
//ScenicView.show(scene);
} catch(Exception e) {
e.printStackTrace();
}
}
}
Iは、各コントローラにObservableList<Visite> data = FXCollections.observableArrayList();
を渡す必要があります。
私は本当にやり方がわかりません。かなり長いクラスなので、コントローラを1台使用しません。
EDIT:上述のよう
TABController.java
public class TabController implements Initializable {
@FXML
private TabPane tabbedPane;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
assert tabbedPane != null : "fx:tabbedPane=\"in\" was not injected: check your FXML file 'TabLayout.fxml'.";
tabbedPane.getSelectionModel().selectedItemProperty().addListener((ov, oldTab, newTab) -> {
if(tabbedPane.getSelectionModel().getSelectedIndex() != 0) {
tabbedPane.getScene().getWindow().setWidth(1171);
tabbedPane.getScene().getWindow().setHeight(700);
} else {
tabbedPane.getScene().getWindow().sizeToScene();
}
});
}
}
EDIT2
4つのタブは、それぞれ自分のモデルクラスを有しています。 私は4つの異なるリストを持っていますが、最初は空です。なぜなら、各タブ用のテーブルがあるので、動的に満たされているからです。 リストは、異なるインターンシップによってtabPaneが呼び出されたときに作成されます。 以前の負荷の可能性があり、この情報をコントローラに渡す必要があるため、これらのリストが必要です。
は実際には、この処理が行われます。
1)
コール]タブのテーブルからロードされた空のリストを作成し、関数insert。その後、データはクローズ時にデータベースに格納されます。
2)
コールリストを作成し、データベースからデータを取得し、次いで、改変することができるテーブルに送信し、特定のフラグを機能インサートを呼び出す関数が表示されます。
は、私は質問の曖昧さは、今、私はこのよう
public class TabController implements Initializable {
@FXML
private TabPane tabbedPane;
@FXML
private VisiteController visiteLController;
private ObservableList<Visite> dataVisite = FXCollections.observableArrayList();
private ObservableList<Visite> dataDelVisite = FXCollections.observableArrayList();
@FXML
private LatteController latteLController;
private ObservableList<Latte> dataLatte = FXCollections.observableArrayList();
private ObservableList<Latte> dataDelLatte = FXCollections.observableArrayList();
@FXML
private PartiController partiLController;
private ObservableList<Parti> dataParti = FXCollections.observableArrayList();
private ObservableList<Parti> dataDelParti = FXCollections.observableArrayList();
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
assert tabbedPane != null : "fx:tabbedPane=\"in\" was not injected: check your FXML file 'TabLayout.fxml'.";
tabbedPane.getSelectionModel().selectedItemProperty().addListener((ov, oldTab, newTab) -> {
if(tabbedPane.getSelectionModel().getSelectedIndex() != 0) {
tabbedPane.getScene().getWindow().setWidth(1171);
tabbedPane.getScene().getWindow().setHeight(700);
} else {
tabbedPane.getScene().getWindow().sizeToScene();
}
});
visiteLController.setData(dataVisite, dataDelVisite);
latteLController.setData(dataLatte, dataDelLatte);
partiLController.setData(dataParti, dataDelParti);
}
}
およびsetメソッドで明らかに各コントローラ
に変更解いてるの前にするために、私は謝罪、私ははっきりしていた願っています
public void setData(ObservableList<Visite> data, ObservableList<Visite> dataDel) {
this.data = data;
this.dataDel = dataDel;
liveSearh();
}
あなたは 'TabController'のコードを投稿できますか?これは、http://stackoverflow.com/questions/37068243/share-model-with-nested-controller –
の複製のようです。 今、私はリンク –
を振り返ります。質問を明確にしてください。正確には、各コントローラーは何を必要としていますか?また、それぞれのニーズに応じたデータを作成するか、それらのデータにアクセスできるのはどこですか? –