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

VPS Starter Arubacloud
0 głosów
346 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ź 365 wizyt
pytanie zadane 27 listopada 2018 w Java przez mprofit Nowicjusz (180 p.)
0 głosów
1 odpowiedź 218 wizyt
pytanie zadane 8 sierpnia 2017 w Java przez Agam Nowicjusz (200 p.)
0 głosów
1 odpowiedź 148 wizyt

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...