• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JavaFX - Jak dodać wiele danych do kolumn w różnych TableView?

0 głosów
242 wizyt
pytanie zadane 16 września 2018 w Java przez MeJavaLike Nowicjusz (120 p.)

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="&lt; 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="&lt; 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="&lt; 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="&lt; 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="&lt; 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="&lt; 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?

1 odpowiedź

0 głosów
odpowiedź 16 września 2018 przez mbabane Szeryf (79,300 p.)
edycja 16 września 2018 przez mbabane

Dokładnie tak samo jak do tego BrowseTable.

Do każego TableView w fxml dodaj fx:id i wstrzyknij poprzez adnotacje @FXML instancję tej klasy. Reszta tak samo (tzn. analogicznie) jak dla BrowseTable.

 

Ponadto tabą również możesz nadawać fx:id i wstrzykiwać prze @FXML, dzięki temu oszczędzasz sobie wyszukiwanie odpowiedniego taba:

<TabPane>
   <Tab fx:id="tab1">
  </Tab>
   <Tab fx:id="tab2">
   </Tab>
</TabPane>
public class Controller
{
     @FXML
      private Tab tab1;
       
     @FXML 
     private Tab tab2;  // żeby wstrzyknęło nazwa zmiennej musi być taka sama jak fx:id w fxml
}

 

Podobne pytania

0 głosów
1 odpowiedź 196 wizyt
pytanie zadane 27 listopada 2018 w Java przez mprofit Nowicjusz (180 p.)
0 głosów
1 odpowiedź 185 wizyt
pytanie zadane 8 sierpnia 2017 w Java przez Agam Nowicjusz (200 p.)
0 głosów
1 odpowiedź 112 wizyt

88,364 zapytań

136,964 odpowiedzi

305,691 komentarzy

58,632 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...