Good day. I can not understand how to fill a TableView in javaFX.
There is a collection with a list of files:
private ObservableList<File> fileList = FXCollections.observableArrayList();
There is a created gui with a table. When I try to fill a table (file names from the list), I get NPE exception.
class Filelist
public class FileList {
private ObservableList<File> fileList = FXCollections.observableArrayList();
public void getDirContent(){
fileList.addAll(File.listRoots());
}
public void viewDir(Path path){
File folder = path.toFile();
fileList.clear();
fileList.addAll(folder.listFiles());
}
public ObservableList<File> getFileList() {
return fileList;
}
}
public class FileController {
private FileList fileList = new FileList();
@FXML
private TableView <File> tableFileList;
@FXML
private TableColumn<File, String> columnName;
@FXML
private Label countLabel;
@FXML
private void initialize(){
columnName.setCellValueFactory(new PropertyValueFactory<>("Name"));
fileList.getDirContent();
tableFileList.setItems(fileList.getFileList());
// countLabel.setText("Total: " + fileList.getFileList().size());
}
The line causing the NPE is tableFileList.setItems(fileList.getFileList());
fxml file:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.canvas.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="700.0" prefWidth="1024.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="abnod.filemanager.controller.FileController">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<VBox prefHeight="200.0" prefWidth="100.0">
<children>
<ToolBar prefHeight="40.0" prefWidth="200.0">
<items>
<Button mnemonicParsing="false" text="Back" />
<Button mnemonicParsing="false" onAction="#showAddDialog" text="New" />
<Button mnemonicParsing="false" text="Copy" />
<Button mnemonicParsing="false" text="Move" />
<Button mnemonicParsing="false" text="Delete" />
</items>
</ToolBar>
<AnchorPane prefHeight="30.0" prefWidth="427.0">
<children>
<ToolBar layoutX="-48.0" layoutY="-6.0" prefHeight="40.0" prefWidth="200.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
<items>
<Button mnemonicParsing="false" prefHeight="25.0" prefWidth="64.0" text="Exit" />
</items>
</ToolBar>
<TextField layoutX="85.0" layoutY="2.0" AnchorPane.leftAnchor="90.0" AnchorPane.rightAnchor="70.0" />
<Button layoutX="450.0" layoutY="2.0" mnemonicParsing="false" text="Search" AnchorPane.rightAnchor="10.0" />
</children>
</AnchorPane>
<AnchorPane VBox.vgrow="ALWAYS">
<children>
<TableView prefHeight="597.0" prefWidth="512.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<columns>
<TableColumn fx:id="columnName" editable="false" minWidth="200.0" prefWidth="267.0" text="Files" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</AnchorPane>
<AnchorPane maxHeight="-Infinity" minHeight="-Infinity" prefHeight="34.0">
<children>
<Label fx:id="countLabel" layoutY="36.0" prefHeight="7.0" prefWidth="140.0" text="Total Files and Dirs" AnchorPane.bottomAnchor="-1.0" AnchorPane.leftAnchor="0.0">
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</Label>
</children>
</AnchorPane>
</children>
</VBox>
</children>
</GridPane>