Выбор записи из TableView Java FX

714
26 ноября 2016, 19:15

Есть таблица:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
 <Pane id="paneMain" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" stylesheets="@style.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <children>
      <AnchorPane prefHeight="400.0" prefWidth="600.0">
         <children>
            <Label layoutX="155.0" layoutY="23.0" text="Работа с базой данных библиотеки" textFill="WHITE" AnchorPane.leftAnchor="155.0" AnchorPane.topAnchor="23.0">
               <font>
                  <Font size="18.0" />
               </font></Label>
            <TableView id="mainTable" fx:id="mainTable" layoutX="14.0" layoutY="63.0" prefHeight="290.0" prefWidth="426.0" stylesheets="@style.css" AnchorPane.bottomAnchor="47.0" AnchorPane.leftAnchor="14.0" AnchorPane.rightAnchor="160.0">
              <columns>
                  <TableColumn fx:id="columnName" prefWidth="103.0" text="Название книги" />
                  <TableColumn fx:id="columnAuthor" prefWidth="129.0" text="Автор" />
                  <TableColumn fx:id="columnYear" prefWidth="69.0" text="Год" />
                  <TableColumn fx:id="columnGenre" prefWidth="143.0" text="Жанр" />
              </columns>
               <columnResizePolicy>
                  <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
               </columnResizePolicy>
            </TableView>
            <Button fx:id="buttonAdd" layoutX="459.0" layoutY="63.0" mnemonicParsing="false" onAction="#toSceneAdd" prefHeight="25.0" prefWidth="79.0" text="Добавить" AnchorPane.leftAnchor="459.0" AnchorPane.topAnchor="63.0" />
            <Button fx:id="buttonDelete" layoutX="459.0" layoutY="151.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="79.0" text="Удалить" AnchorPane.leftAnchor="459.0" AnchorPane.topAnchor="151.0" />
            <Button layoutX="459.0" layoutY="107.0" mnemonicParsing="false" prefHeight="25.0" prefWidth="79.0" text="Изменить" />
         </children>
      </AnchorPane>
   </children>
</Pane>

Контроллер к таблице:

package sample;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import library.*;
import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableView;

import java.io.IOException;
import java.net.URL;
import java.sql.SQLException;
import java.util.ResourceBundle;
import static database.Database.getBooks;
public class Controller implements Initializable{
    public Button buttonAdd;
    public TableView<Book> mainTable;
    public TableColumn<Book,String> columnName;
    public TableColumn<Book,String> columnAuthor;
    public TableColumn<Book,Integer> columnYear;
    public TableColumn<Book,String> columnGenre;
    public void  toSceneAdd(ActionEvent actionEvent) throws IOException {
        Parent root = FXMLLoader.load(getClass().getResource("/sample/AddNewBook.fxml"));
        Main.primaryStage.setScene(new Scene(root));
        Main.primaryStage.show();
    }
    @Override
    public void initialize(URL location, ResourceBundle resources) {
        try {
            ObservableList<Book> books = FXCollections.observableArrayList(getBooks());
            columnName.setCellValueFactory(new PropertyValueFactory<Book, String>("NameBook"));
            columnAuthor.setCellValueFactory(new PropertyValueFactory<Book,String>("authorBook"));
            columnGenre.setCellValueFactory(new PropertyValueFactory<Book, String>("genreBook"));
            columnYear.setCellValueFactory(new PropertyValueFactory<Book, Integer>("yearBook"));
            mainTable.setItems(books);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Пользователь выбирает запись в таблице и нажимает кнопку, как отследить выбранную запись пользователем?

Answer 1

Получить выбранную строку, а точнее данные, которыми заполнена эта строка, можно с помощью цепочки методов getSelectionModel().getSelectedItem() класса TableView:

Book selectedBook = mainTable.getSelectionModel().getSelectedItem();
READ ALSO
Сортировка String по количеству гласных букв

Сортировка String по количеству гласных букв

В общем, мне нужно подсчитать количество гласных букв в n введенных строках и отсортировать их по возрастанию\убываниюДля этого, я сначала...

438
Добавление кнопки currentLocation

Добавление кнопки currentLocation

В google maps хочу реализовать кнопку myCurrentLocationВ методе onCreate добавил следующее:

245
Обновление сервера Intellij idea

Обновление сервера Intellij idea

В intellij ideа, когда запущен сервер, я нажимаю обновить и табличка "Restart server" "Redeploy server", оба пересобирают артифактыМожно ли как-то обновить проект,...

265
ActionListener: данные из двух класов

ActionListener: данные из двух класов

Новичок в SWING просит помощи

283