JavaFX 2. Как вывести данные в TableView? – Devcolibri – Android для начинающих

JavaFX 2. Как вывести данные в TableView?

В этом уроке мы разберемся как работать с TableView и научимся выводить POJO в TableView.

Создавать форму мы будем с помощью SceneBuilder, как его настроить можно почитать тут.

Структура нашего проекта:

Теперь пройдем по всем шагам создания данного проекта, и разберемся с деталями.

Шаг 1

Создаем простой JavaFX проект:

И редактируем класс Main.java:

package sample;

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

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("views/main.fxml"));
        primaryStage.setTitle("Users List");
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}

Как видите в 13 строке мы указываем какой fxml файл будем использовать.

Создайте пакет views и в нем будем хранить наши views.

Шаг 2

Создаем view называем её main.fxml:

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

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" 
            minHeight="-Infinity" minWidth="-Infinity" 
            prefHeight="400.0" prefWidth="624.0" 
            xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" 
            fx:controller="sample.controller.Controller">
  <children>
    <!-- Таблица в которую мы будем выводит наш pojo -->
    <TableView fx:id="tableUsers" layoutX="12.0" layoutY="62.0" prefHeight="324.0" prefWidth="600.0">
      <columns>
        <!-- Колонки таблицы -->
        <TableColumn prefWidth="80.0" text="№" fx:id="idColumn" />
        <TableColumn prefWidth="150.0" text="Login" fx:id="loginColumn" />
        <TableColumn prefWidth="150.0" text="Password" fx:id="passwordColumn" />
        <TableColumn prefWidth="220.0" text="Email" fx:id="emailColumn" />
      </columns>
    </TableView>
    <Label layoutX="14.0" layoutY="18.0" text="List all users:">
      <font>
        <Font name="Verdana" size="24.0" />
      </font>
    </Label>
  </children>
</AnchorPane>

В 11-й строке мы привязываем данную view на определённый контроллер который будет управлять содержимым view.

Выглядеть будущее окно будет так:

Шаг 3

Теперь создадим POJO которое будем выводить в таблице.

package sample.pojo;

public class User {

    private int id;
    private String login;
    private String password;
    private String email;

    public User(int id, String login, String password, String email) {
        this.id = id;
        this.login = login;
        this.password = password;
        this.email = email;
    }

    public User() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

На основе этого класса мы будем формировать данные для заполнения таблицы.

Шаг 4

А теперь реализуем мозг нашего приложения, а именно контроллер. Создаем новый пакет controller и в нем создаем класс Controller.java:

package sample.controller;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import sample.pojo.User;

import javafx.scene.control.TableColumn;

public class Controller {

    private ObservableList<User> usersData = FXCollections.observableArrayList();

    @FXML
    private TableView<User> tableUsers;

    @FXML
    private TableColumn<User, Integer> idColumn;

    @FXML
    private TableColumn<User, String> loginColumn;

    @FXML
    private TableColumn<User, String> passwordColumn;

    @FXML
    private TableColumn<User, String> emailColumn;

    // инициализируем форму данными
    @FXML
    private void initialize() {
        initData();

        // устанавливаем тип и значение которое должно хранится в колонке
        idColumn.setCellValueFactory(new PropertyValueFactory<User, Integer>("id"));
        loginColumn.setCellValueFactory(new PropertyValueFactory<User, String>("login"));
        passwordColumn.setCellValueFactory(new PropertyValueFactory<User, String>("password"));
        emailColumn.setCellValueFactory(new PropertyValueFactory<User, String>("email"));

        // заполняем таблицу данными
        tableUsers.setItems(usersData);
    }

    // подготавливаем данные для таблицы
    // вы можете получать их с базы данных
    private void initData() {
        usersData.add(new User(1, "Alex", "qwerty", "alex@mail.com"));
        usersData.add(new User(2, "Bob", "dsfsdfw", "bob@mail.com"));
        usersData.add(new User(3, "Jeck", "dsfdsfwe", "Jeck@mail.com"));
        usersData.add(new User(4, "Mike", "iueern", "mike@mail.com"));
        usersData.add(new User(5, "colin", "woeirn", "colin@mail.com"));
    }

}

@FXML – эта аннотация говорит о том, что поле или метод класса доступны для разметки fxml.

Как видите мы аннотируем переменные, которые должны называться также как и id компонента разметки:

@FXML
private TableView<User> tableUsers;

тогда в разметке fxml должно быть так:

<TableView fx:id="tableUsers">
   ...
</TableView>

Шаг 5

Теперь можно запустить наше приложение и посмотреть на результат:

ПОХОЖИЕ ПУБЛИКАЦИИ

    None Found

79765
01/10/2013

26 комментариев к статье "JavaFX 2. Как вывести данные в TableView?"

Добавить комментарий

Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.

Я ознакомлен(а)