• 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?

Object Storage Arubacloud
0 głosów
351 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,280 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ź 372 wizyt
pytanie zadane 27 listopada 2018 w Java przez mprofit Nowicjusz (180 p.)
0 głosów
1 odpowiedź 222 wizyt
pytanie zadane 8 sierpnia 2017 w Java przez Agam Nowicjusz (200 p.)
0 głosów
1 odpowiedź 153 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...