JavaFX, заполняющий несколько таблиц в отдельных вкладках - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь заполнить таблицы на отдельных вкладках в TabPane.Мне удалось заполнить только одну на первой вкладке следующим образом:

@FXML
public void initialize(URL url, ResourceBundle rb) {
    //assert serviceChoiceBox1 != null : "fx:id=\"serviceChoiceBox1\" was not injected: check your FXML file 'ScheduleServicePane.fxml'.";

    ServiceName.setCellValueFactory(new PropertyValueFactory<Service, String>("name"));
    ServicePrice.setCellValueFactory(new PropertyValueFactory<Service, Double>("price"));
    ServiceDuration.setCellValueFactory(new PropertyValueFactory<Service, Integer>("duration"));
    TableView.setItems(List());

}


private ObservableList<Service> List(){
    ObservableList<Service> service = FXCollections.observableArrayList(serviceRepository.list());
    return service;
}

У меня есть еще две вкладки с таблицами, но я не могу заполнить их подготовленным списком данных, которые у меня есть

Я хочу заполнить другие вкладки аналогичными данными
I want to populate other tabs with similar data

Кто-нибудь может помочь?

Я также читал об отдельных контроллерах для каждой вкладки, нопохоже, в таком случае это слишком.

1 Ответ

0 голосов
/ 16 мая 2018

Я бы использовал FilteredList в этом случае. Это позволит вам создать «подсписок» из исходного списка. В этой демонстрации я создаю поле типа в классе Service. Затем я фильтрую исходный список на основе «типа». Вам не нужно создавать поле типа, но вам нужно будет найти что-то для фильтрации, если вы этого не сделаете.

Main:

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

/**
 *
 * @author blj0011
 */
public class JavaFXApplication184 extends Application
{

    @Override
    public void start(Stage stage) throws Exception
    {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

        Scene scene = new Scene(root);

        stage.setScene(scene);
        stage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        launch(args);
    }

}

Контроллер:

import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import java.util.function.Predicate;
import javafx.collections.FXCollections;
import javafx.collections.transformation.FilteredList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TabPane;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;

/**
 *
 * @author blj0011
 */
public class FXMLDocumentController implements Initializable
{

    @FXML
    private TabPane tpMain;
    @FXML
    private TableView<Service> tvTab1, tvTab2;
    @FXML
    private TableColumn<Service, String> tcServiceNameTab1, tcServicePriceTab1, tcServiceDurationTab1;
    @FXML
    private TableColumn<Service, String> tcServiceNameTab2, tcServicePriceTab2, tcServiceDurationTab2;

    @FXML
    private void handleButtonAction(ActionEvent event)
    {
        System.out.println("You clicked me!");
    }

    @Override
    public void initialize(URL url, ResourceBundle rb)
    {
        tcServiceNameTab1.setCellValueFactory(new PropertyValueFactory("name"));
        tcServicePriceTab1.setCellValueFactory(new PropertyValueFactory("price"));
        tcServiceDurationTab1.setCellValueFactory(new PropertyValueFactory("duration"));

        tcServiceNameTab2.setCellValueFactory(new PropertyValueFactory("name"));
        tcServicePriceTab2.setCellValueFactory(new PropertyValueFactory("price"));
        tcServiceDurationTab2.setCellValueFactory(new PropertyValueFactory("duration"));

        //Add sanoke data
        List<Service> services = new ArrayList();
        services.add(new Service("Manicure 1", "40.0", "60", "Manicure"));
        services.add(new Service("Manicure 2", "40.0", "60", "Manicure"));
        services.add(new Service("Pedicure 1", "40.0", "60", "Pedicure"));
        services.add(new Service("Pedicure 2", "40.0", "60", "Pedicure"));

        FilteredList<Service> flTab1 = new FilteredList(FXCollections.observableArrayList(services), getManicures());
        FilteredList<Service> flTab2 = new FilteredList(FXCollections.observableArrayList(services), getPedicures());

        tvTab1.setItems(flTab1);
        tvTab2.setItems(flTab2);
    }

    Predicate<Service> getManicures()
    {
        return p -> p.getType().equals("Manicure");
    }

    Predicate<Service> getPedicures()
    {
        return p -> p.getType().equals("Pedicure");
    }

}

FXML:

<?xml version="1.0" encoding="UTF-8"?>

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

<AnchorPane id="AnchorPane" prefHeight="406.0" prefWidth="369.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.141" fx:controller="javafxapplication184.FXMLDocumentController">
   <children>
      <TabPane fx:id="tpMain" layoutX="56.0" layoutY="67.0" prefHeight="200.0" prefWidth="200.0" tabClosingPolicy="UNAVAILABLE" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
        <tabs>
          <Tab text="Manicure">
            <content>
              <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
                     <children>
                        <TableView fx:id="tvTab1" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                          <columns>
                            <TableColumn fx:id="tcServiceNameTab1" prefWidth="75.0" text="Service" />
                            <TableColumn fx:id="tcServicePriceTab1" prefWidth="75.0" text="Price" />
                              <TableColumn fx:id="tcServiceDurationTab1" prefWidth="75.0" text="Duration" />
                          </columns>
                        </TableView>
                     </children>
                  </AnchorPane>
            </content>
          </Tab>
          <Tab text="Pedicure">
            <content>
              <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
                     <children>
                        <TableView fx:id="tvTab2" prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                           <columns>
                              <TableColumn fx:id="tcServiceNameTab2" prefWidth="75.0" text="Service" />
                              <TableColumn fx:id="tcServicePriceTab2" prefWidth="75.0" text="Price" />
                              <TableColumn fx:id="tcServiceDurationTab2" prefWidth="75.0" text="Duration" />
                           </columns>
                        </TableView>
                     </children>
                  </AnchorPane>
            </content>
          </Tab>
        </tabs>
      </TabPane>
   </children>
</AnchorPane>

Услуги:

/**
 *
 * @author blj0011
 */
public class Service
{

    private String name;
    private String price;
    private String duration;
    private String type;

    public Service(String name, String price, String duration, String type)
    {
        this.name = name;
        this.price = price;
        this.duration = duration;
        this.type = type;
    }

    /**
     * @return the name
     */
    public String getName()
    {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name)
    {
        this.name = name;
    }

    /**
     * @return the price
     */
    public String getPrice()
    {
        return price;
    }

    /**
     * @param price the price to set
     */
    public void setPrice(String price)
    {
        this.price = price;
    }

    /**
     * @return the duration
     */
    public String getDuration()
    {
        return duration;
    }

    /**
     * @param duration the duration to set
     */
    public void setDuration(String duration)
    {
        this.duration = duration;
    }

    /**
     * @return the type
     */
    public String getType()
    {
        return type;
    }

    /**
     * @param type the type to set
     */
    public void setType(String type)
    {
        this.type = type;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...