Cześć,
Jakoż iż zacząłem się bawić JavaFX i tworze aplikacje natrafiłem na pewien problem, na który sposobu znaleźć nie umiem :) A więc do sedna,
Moja struktura FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Separator?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.StackPane?>
<StackPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="403.0" prefWidth="573.0" xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.practice.controllers.BrowseController">
<children>
<Pane prefHeight="464.0" prefWidth="456.0">
<children>
<TabPane fx:id="tabPane" layoutX="-3.0" layoutY="-1.0" prefHeight="417.0" prefWidth="573.0" tabClosingPolicy="UNAVAILABLE">
<tabs>
<Tab text="PKO Bank Polski S.A.">
<content>
<AnchorPane prefHeight="383.0" prefWidth="573.0">
<children>
<Button fx:id="buttonBack" layoutX="489.0" layoutY="340.0" mnemonicParsing="false" onAction="#closeWindow" prefHeight="25.0" prefWidth="72.0" text="< Back" />
<TableView fx:id="browseTable" layoutX="4.0" layoutY="-1.0" prefHeight="333.0" prefWidth="573.0">
<columns>
<TableColumn fx:id="currencyName" prefWidth="124.0" text="Name" />
<TableColumn fx:id="saleValueColumn" prefWidth="220.0" text="Sale" />
<TableColumn fx:id="purchaseValueColumn" prefWidth="226.0" text="Purchase" />
</columns>
</TableView>
<Separator layoutX="2.0" layoutY="335.0" prefHeight="1.0" prefWidth="573.0" />
</children>
</AnchorPane>
</content>
</Tab>
<Tab text="Santander Bank Polski S.A.">
<content>
<AnchorPane prefHeight="200.0" prefWidth="200.0">
<children>
<Button layoutX="489.0" layoutY="340.0" mnemonicParsing="false" onAction="#closeWindow" prefHeight="25.0" prefWidth="72.0" text="< Back" />
<TableView layoutX="4.0" layoutY="-1.0" prefHeight="333.0" prefWidth="573.0">
<columns>
<TableColumn prefWidth="124.0" text="Name" />
<TableColumn prefWidth="220.0" text="Sale" />
<TableColumn prefWidth="226.0" text="Purchase" />
</columns>
</TableView>
<Separator layoutX="2.0" layoutY="335.0" prefHeight="1.0" prefWidth="573.0" />
</children>
</AnchorPane>
</content>
</Tab>
<Tab text="PEKO S.A.">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<Button layoutX="489.0" layoutY="340.0" mnemonicParsing="false" onAction="#closeWindow" prefHeight="25.0" prefWidth="72.0" text="< Back" />
<TableView layoutX="4.0" layoutY="-1.0" prefHeight="333.0" prefWidth="573.0">
<columns>
<TableColumn prefWidth="124.0" text="Name" />
<TableColumn prefWidth="220.0" text="Sale" />
<TableColumn prefWidth="226.0" text="Purchase" />
</columns>
</TableView>
<Separator layoutX="2.0" layoutY="335.0" prefHeight="1.0" prefWidth="573.0" />
</children></AnchorPane>
</content>
</Tab>
<Tab text="ING Bank Śląski">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<Button layoutX="489.0" layoutY="340.0" mnemonicParsing="false" onAction="#closeWindow" prefHeight="25.0" prefWidth="72.0" text="< Back" />
<TableView layoutX="4.0" layoutY="-1.0" prefHeight="333.0" prefWidth="573.0">
<columns>
<TableColumn prefWidth="124.0" text="Name" />
<TableColumn prefWidth="220.0" text="Sale" />
<TableColumn prefWidth="226.0" text="Purchase" />
</columns>
</TableView>
<Separator layoutX="2.0" layoutY="335.0" prefHeight="1.0" prefWidth="573.0" />
</children></AnchorPane>
</content>
</Tab>
<Tab text="mBank">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<Button layoutX="489.0" layoutY="340.0" mnemonicParsing="false" onAction="#closeWindow" prefHeight="25.0" prefWidth="72.0" text="< Back" />
<TableView layoutX="4.0" layoutY="-1.0" prefHeight="333.0" prefWidth="573.0">
<columns>
<TableColumn prefWidth="124.0" text="Name" />
<TableColumn prefWidth="220.0" text="Sale" />
<TableColumn prefWidth="226.0" text="Purchase" />
</columns>
</TableView>
<Separator layoutX="2.0" layoutY="335.0" prefHeight="1.0" prefWidth="573.0" />
</children></AnchorPane>
</content>
</Tab>
<Tab text="Bank Milenium">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<Button layoutX="489.0" layoutY="340.0" mnemonicParsing="false" onAction="#closeWindow" prefHeight="25.0" prefWidth="72.0" text="< Back" />
<TableView layoutX="4.0" layoutY="-1.0" prefHeight="333.0" prefWidth="573.0">
<columns>
<TableColumn prefWidth="124.0" text="Name" />
<TableColumn prefWidth="220.0" text="Sale" />
<TableColumn prefWidth="226.0" text="Purchase" />
</columns>
</TableView>
<Separator layoutX="2.0" layoutY="335.0" prefHeight="1.0" prefWidth="573.0" />
</children></AnchorPane>
</content>
</Tab>
</tabs>
</TabPane>
</children></Pane>
</children>
</StackPane>
Jak można zauważyć mam okno Browse, które posiada TabPane z 6 Tab'ami w każdym z nich mam tabele TableView, którą chce wypełnić danymi, robię to w BrowseController, którego kod wygląda następująco (wiem ze wypełnia mi pierwszą tabele w pierwszym Tabie wszystkimi danymi ale to jest właśnie mój problem :D ) :
package com.practice.controllers;
import com.practice.CurrencyProperties;
import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.stage.Stage;
import java.util.ArrayList;
import static com.practice.Main.banks;
public class BrowseController {
@FXML
public Button buttonBack;
public TableColumn<CurrencyProperties, String> currencyName;
public TableColumn<CurrencyProperties, Double> saleValueColumn;
public TableColumn<CurrencyProperties, Double> purchaseValueColumn;
public TableView<CurrencyProperties> browseTable;
public TabPane tabPane;
@FXML
public void closeWindow() {
Stage stage = (Stage) buttonBack.getScene().getWindow();
stage.close();
}
@FXML
void initialize() {
ObservableList<CurrencyProperties> currencyList = FXCollections.observableArrayList();
ObservableList<Tab> tabList = tabPane.getTabs();
for(Tab z: tabList){
if (banks.containsKey(z.getText())) {
ArrayList<CurrencyProperties> temp = banks.get(z.getText());
for (CurrencyProperties x : temp) {
String name = x.getTitle();
Double sale = x.getSaleValue();
Double purchase = x.getPurchaseValue();
currencyList.add(new CurrencyProperties(name, sale, purchase));
}
currencyName.setCellValueFactory(s -> new ReadOnlyStringWrapper(s.getValue().getTitle()));
saleValueColumn.setCellValueFactory(s -> new ReadOnlyObjectWrapper<>(s.getValue().getSaleValue()));
purchaseValueColumn.setCellValueFactory(s -> new ReadOnlyObjectWrapper<>(s.getValue().getPurchaseValue()));
browseTable.setItems(currencyList);
}
}
}
}
I tutaj jest właśnie pytanie. W jaki sposób dane (dostarczane z Mapy) przydzielić do odpowiedniego Tab'a ( w tym przypadku bankowi)? Innymi słowy mając instancje ObservableList<> zawierające listę instancji CurrencyProperites (dane do tabeli) dostarczyć do odpowiedniegp TableView, a jeszcze niżęj TableColumn dla poszczególnego Taba (banku)? Musze deklarować dla każdego TableColumn w każdym TableView fx:id i krok po kroku dodawać dane?