I have a huge problem in my code because of this tableview, supposed that i am going to display my data to the tableview from mysql. BTW i am doing a to do list project, i cannot display my task to tableview.
HelloApplication Class:
package org.example.jbdcfx;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
public class HelloApplication extends Application {
public static Stage stage;
@Override
public void start(Stage stage) throws IOException {
HelloApplication.stage = stage;
FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("loginview.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 416, 398);
stage.setTitle("Login");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
TableController.java:
package org.example.jbdcfx;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDate;
import static org.example.jbdcfx.HelloController.storedUserId;
public class TableController {
public TableView<Task> taskTable;
public AnchorPane display;
@FXML
public TableColumn<Task,String> titleCol;
@FXML
public TableColumn<Task,String> descCol;
@FXML
public TableColumn<Task,String> dateCol;
@FXML
public TableColumn<Task,String> editCol;
public TextField tfTitle;
public TextField tfDesc;
public DatePicker dpDate;
ObservableList<Task> Tasklist = FXCollections.observableArrayList();
public void addTask(ActionEvent event) {
String title = tfTitle.getText();
String description = tfDesc.getText();
LocalDate date = dpDate.getValue();
try(Connection c = MySQLConnection.getConnection();
PreparedStatement statement = c.prepareStatement("INSERT INTO tbltask(userId,title,description,date) VALUES (?,?,?,?)")){
java.sql.Date sqlDate = java.sql.Date.valueOf(date);
statement.setInt(1,storedUserId);
statement.setString(2,title);
statement.setString(3,description);
statement.setDate(4, sqlDate);
int row = statement.executeUpdate();
System.out.println("Task Created");
Stage stage = (Stage) tfTitle.getScene().getWindow();
stage.close();
} catch (SQLException e) {
e.printStackTrace();
}
// while (resultSet.next()){
// StudentList.add(new Student( resultSet.getInt("id"), resultSet.getString("name"), resultSet.getDate("birth"),resultSet.getString("adress"), resultSet.getString("email")));
// studentsTable.setItems(StudentList);
// }
loadTask();
}
public void loadTask() {
Tasklist.clear();
try (Connection c = MySQLConnection.getConnection();
PreparedStatement statement = c.prepareStatement("SELECT * FROM tbltask WHERE userId = ?")) {
statement.setInt(1, storedUserId);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
int id = resultSet.getInt("taskId");
String title = resultSet.getString("title");
String description = resultSet.getString("description");
LocalDate date = resultSet.getDate("date").toLocalDate();
System.out.println("ID: " + id );
System.out.println("Title: " + title );
System.out.println("Desc: " + description);
System.out.println("Date: " + date );
System.out.println("n");
Tasklist.add(new Task(id, title, description, date));
}
taskTable.setItems(Tasklist);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void openAddTask(ActionEvent event) {
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("taskview.fxml"));
Parent root1 = (Parent) fxmlLoader.load();
Stage stage = new Stage();
stage.setTitle("New Task");
stage.setScene(new Scene(root1));
stage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
public void closeTaskView(ActionEvent event) {
}
}
Task.java
package org.example.jbdcfx;
import java.time.LocalDate;
public class Task {
private int id;
private String title;
private String description;
private LocalDate date;
public Task(int id, String title, String description, LocalDate date) {
this.id = id;
this.title = title;
this.description = description;
this.date = date;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public LocalDate getDate() {
return date;
}
public void setDate(LocalDate date) {
this.date = date;
}
}
the 2 fxml files for creating a task and display my task.
homepage.fxml(where the tableview is):
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="597.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.example.jbdcfx.TableController">
<children>
<AnchorPane fx:id="pnDash" prefHeight="480.0" prefWidth="800.0">
<children>
<Label layoutX="338.0" layoutY="36.0" text="To Do List">
<font>
<Font name="System Bold" size="26.0" />
</font></Label>
<Button fx:id="btnAddTask" layoutX="65.0" layoutY="80.0" mnemonicParsing="false" onAction="#openAddTask" prefHeight="25.0" prefWidth="694.0">
<graphic>
<ImageView fitHeight="21.0" fitWidth="22.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../../../add.png" />
</image>
</ImageView>
</graphic></Button>
<AnchorPane fx:id="display" layoutX="65.0" layoutY="133.0" prefHeight="302.0" prefWidth="694.0">
<children>
<TableView fx:id="taskTable" prefHeight="302.0" prefWidth="694.0">
<columns>
<TableColumn fx:id="titleCol" prefWidth="158.3333511352539" text="Title" />
<TableColumn fx:id="descCol" prefWidth="304.6666717529297" text="Description" />
<TableColumn fx:id="dateCol" prefWidth="109.0" text="Due Date" />
<TableColumn fx:id="editCol" prefWidth="121.0" text="TAB" />
</columns>
</TableView>
</children></AnchorPane>
</children>
</AnchorPane>
</children>
</AnchorPane>
Taskview.fxml (for creating task and inserting it to the table)
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.example.jbdcfx.TableController">
<children>
<AnchorPane prefHeight="400.0" prefWidth="600.0">
<children>
<Label layoutX="49.0" layoutY="41.0" text="Create a task">
<font>
<Font name="System Bold" size="21.0" />
</font>
</Label>
<Label layoutX="49.0" layoutY="84.0" text="Title">
<font>
<Font size="14.0" />
</font>
</Label>
<TextField fx:id="tfTitle" layoutX="148.0" layoutY="81.0" prefHeight="25.0" prefWidth="406.0" />
<TextField fx:id="tfDesc" layoutX="148.0" layoutY="128.0" prefHeight="104.0" prefWidth="406.0" />
<Label layoutX="49.0" layoutY="170.0" text="Description">
<font>
<Font size="14.0" />
</font></Label>
<Label layoutX="48.0" layoutY="259.0" text="Deadline">
<font>
<Font size="14.0" />
</font>
</Label>
<DatePicker fx:id="dpDate" layoutX="148.0" layoutY="256.0" prefHeight="25.0" prefWidth="406.0" />
<Button layoutX="423.0" layoutY="319.0" mnemonicParsing="false" onAction="#addTask" prefHeight="25.0" prefWidth="62.0" text="Add" />
<Button layoutX="492.0" layoutY="319.0" mnemonicParsing="false" onAction="#closeTaskView" prefHeight="25.0" prefWidth="62.0" text="Cancel" />
</children></AnchorPane>
</children>
</AnchorPane>
now this is the error i get:
Exception in thread “JavaFX Application Thread” java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at javafx.fxml@21/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1858)
at javafx.fxml@21/javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1726)
at javafx.base@21/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at javafx.base@21/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:232)
at javafx.base@21/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:189)
at javafx.base@21/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base@21/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base@21/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@21/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@21/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@21/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@21/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@21/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base@21/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.base@21/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics@21/javafx.scene.Node.fireEvent(Node.java:8875)
at javafx.controls@21/javafx.scene.control.Button.fire(Button.java:203)
at javafx.controls@21/com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:207)
at javafx.controls@21/com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
at javafx.base@21/com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
at javafx.base@21/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at javafx.base@21/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:232)
at javafx.base@21/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:189)
at javafx.base@21/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base@21/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base@21/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@21/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@21/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@21/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@21/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@21/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base@21/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base@21/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics@21/javafx.scene.Scene$MouseHandler.process(Scene.java:3984)
at javafx.graphics@21/javafx.scene.Scene.processMouseEvent(Scene.java:1890)
at javafx.graphics@21/javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2708)
at javafx.graphics@21/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:411)
at javafx.graphics@21/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:301)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at javafx.graphics@21/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:450)
at javafx.graphics@21/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
at javafx.graphics@21/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:449)
at javafx.graphics@21/com.sun.glass.ui.View.handleMouseEvent(View.java:551)
at javafx.graphics@21/com.sun.glass.ui.View.notifyMouse(View.java:937)
at javafx.graphics@21/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics@21/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:185)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:115)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:72)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at javafx.base@21/com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:270)
at javafx.fxml@21/com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:84)
at javafx.fxml@21/javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1853)
… 46 more
Caused by: java.lang.NullPointerException: Cannot invoke “javafx.scene.control.TableView.setItems(javafx.collections.ObservableList)” because “this.taskTable” is null
at org.example.jbdcfx/org.example.jbdcfx.TableController.loadTask(TableController.java:111)
at org.example.jbdcfx/org.example.jbdcfx.TableController.addTask(TableController.java:78)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
… 53 more
1