无法从数据库中填充Javafx表视图
我想向Javafx表中添加值 这些值存储在远程数据库中 从db(无法从数据库中填充Javafx表视图,java,database,javafx,Java,Database,Javafx,我想向Javafx表中添加值 这些值存储在远程数据库中 从db(setAll(service.listReserveRung())中获取值的方法按预期工作。当我尝试运行以下代码以将值放入Javafx表时,我得到了一个完整的错误列表,第一个是空指针异常。 代码如下: public void listReserv() { try { AlleReservTable.getItems().setAll(service.listReservierung()); tableColu
setAll(service.listReserveRung()
)中获取值的方法按预期工作。当我尝试运行以下代码以将值放入Javafx表时,我得到了一个完整的错误列表,第一个是空指针异常。
代码如下:
public void listReserv() {
try {
AlleReservTable.getItems().setAll(service.listReservierung());
tableColumnReservNr.setCellValueFactory(
new PropertyValueFactory<Reservierung, Integer>("reservNr"));
tableColumnReservName.setCellValueFactory(
new PropertyValueFactory<Reservierung, String>("kundeName"));
tableColumnReservVon.setCellValueFactory(
new PropertyValueFactory<Reservierung, Timestamp>("von"));
tableColumnReservBis.setCellValueFactory(
new PropertyValueFactory<Reservierung, Timestamp>("bis"));
} catch(Exception e) {
e.printStackTrace();
}
}
public void listReserv(){
试一试{
AlleReservTable.getItems().setAll(service.listReserveRung());
tableColumnReservNr.setCellValueFactory(
新物业价值工厂(“reservNr”);
tableColumnReservName.setCellValueFactory(
新地产价值工厂(“昆德纳姆”);
tableColumnReservVon.setCellValueFactory(
新物业价值工厂(“von”);
tableColumnReservBis.setCellValueFactory(
新物业价值工厂(“bis”);
}捕获(例外e){
e、 printStackTrace();
}
}
嘿,我为您做了一个工作示例,我使用了Java8的新日期时间API。
ReservationService不查询数据库,若要检查此情况,您必须发布服务类。此示例可能会对您有所帮助
FXML文件
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane fx:controller="de.professional_webworkx.reservationmanager.controller.MainController" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="768.0" prefWidth="1024.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children><TableView fx:id="reservationTable" prefHeight="768.0" prefWidth="1024.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" xmlns:fx="http://javafx.com/fxml">
<columns>
<TableColumn fx:id="resNumber" minWidth="250.0" prefWidth="250.0" text="ReservationID" />
<TableColumn fx:id="customerName" minWidth="450.0" prefWidth="500.0" text="CustomerName" />
<TableColumn fx:id="checkIn" minWidth="100.0" prefWidth="100.0" text="CheckIn" />
<TableColumn fx:id="checkOut" minWidth="100.0" prefWidth="100.0" text="CheckOut" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" />
</columns>
</TableView>
</children></AnchorPane>
主控制器
package de.professional_webworkx.reservationmanager.controller;
import de.professional_webworkx.reservationmanager.business.ReservationService;
import de.professional_webworkx.reservationmanager.model.Reservation;
import java.net.URL;
import java.time.LocalDateTime;
import java.util.List;
import java.util.ResourceBundle;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.StringProperty;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
/**
* Main FXML Controller
* @author Patrick Ott <Patrick.Ott@professional-webworkx.de>
* @version 1.0
*/
public class MainController implements Initializable {
@FXML
TableView<Reservation> reservationTable;
@FXML
TableColumn<Reservation, Integer> resNumber;
@FXML
TableColumn<Reservation, String> customerName;
@FXML
TableColumn<Reservation, ObjectProperty<LocalDateTime>> checkIn;
@FXML
TableColumn<Reservation, ObjectProperty<LocalDateTime>> checkOut;
@Override
public void initialize(URL url, ResourceBundle rb) {
ReservationService service = new ReservationService();
List<Reservation> allReservations = service.getAllReservations();
reservationTable.getItems().addAll(allReservations);
resNumber.setCellValueFactory(new PropertyValueFactory<>("reserveNumber"));
customerName.setCellValueFactory(new PropertyValueFactory<>("customerName"));
checkIn.setCellValueFactory(new PropertyValueFactory<>("checkIn"));
checkOut.setCellValueFactory(new PropertyValueFactory<>("checkOut"));
}
}
package de.professional\u webworkx.reservationmanager.controller;
导入de.professional_webworkx.reservationmanager.business.ReservationService;
导入de.professional_webworkx.reservationmanager.model.Reservation;
导入java.net.URL;
导入java.time.LocalDateTime;
导入java.util.List;
导入java.util.ResourceBundle;
导入javafx.beans.property.ObjectProperty;
导入javafx.beans.property.StringProperty;
导入javafx.fxml.fxml;
导入javafx.fxml.Initializable;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.scene.control.cell.PropertyValueFactory;
/**
*主FXML控制器
*@作者帕特里克·奥特
*@version 1.0
*/
公共类MainController实现可初始化{
@FXML
TableView reservationTable;
@FXML
表列编号;
@FXML
表列客户名称;
@FXML
表列签入;
@FXML
表列检验;
@凌驾
公共void初始化(URL、ResourceBundle rb){
ReservationService=新的ReservationService();
List allReservations=service.getAllReservations();
reservationTable.getItems().addAll(所有保留);
resNumber.setCellValueFactory(新属性ValueFactory(“reserveNumber”);
customerName.setCellValueFactory(新属性ValueFactory(“customerName”);
checkIn.setCellValueFactory(新属性ValueFactory(“checkIn”);
checkOut.setCellValueFactory(新属性ValueFactory(“checkOut”);
}
}
预订实体
package de.professional_webworkx.reservationmanager.model;
import java.time.LocalDate;
import java.util.Random;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
/**
* Reservation entity
* @author Patrick Ott <Patrick.Ott@professional-webworkx.de>
* @version 1.0
*/
public class Reservation {
private IntegerProperty reserveNumberProperty;
private StringProperty customerNameProperty;
private ObjectProperty<LocalDate> checkIn;
private ObjectProperty<LocalDate> checkOut;
public Reservation() {
reserveNumberProperty = new SimpleIntegerProperty(generateReservationNumber());
customerNameProperty = new SimpleStringProperty();
checkIn = new SimpleObjectProperty<>();
checkOut = new SimpleObjectProperty<>();
}
public Reservation(final String customerName, final LocalDate checkIn, final LocalDate checkOut) {
reserveNumberProperty = new SimpleIntegerProperty(generateReservationNumber());
customerNameProperty = new SimpleStringProperty(customerName);
this.checkIn = new SimpleObjectProperty<>(checkIn);
this.checkOut = new SimpleObjectProperty<>(checkOut);
}
/**
* @return the reserveNumberProperty
*/
public IntegerProperty getReserveNumberProperty() {
return reserveNumberProperty;
}
public Integer getReserveNumber() {
return reserveNumberProperty.get();
}
/**
* @param reserveNumberProperty the reserveNumberProperty to set
*/
public void setReserveNumberProperty(IntegerProperty reserveNumberProperty) {
this.reserveNumberProperty = reserveNumberProperty;
}
/**
* @return the customerNameProperty
*/
public StringProperty getCustomerNameProperty() {
return customerNameProperty;
}
public String getCustomerName() {
return customerNameProperty.get();
}
/**
* @param customerNameProperty the customerNameProperty to set
*/
public void setCustomerNameProperty(StringProperty customerNameProperty) {
this.customerNameProperty = customerNameProperty;
}
/**
* @return the checkIn
*/
public ObjectProperty<LocalDate> getCheckInProperty() {
return checkIn;
}
public LocalDate getCheckIn() {
return checkIn.getValue();
}
/**
* @param fromProperty the checkIn to set
*/
public void setCheckInProperty(ObjectProperty<LocalDate> fromProperty) {
this.checkIn = fromProperty;
}
/**
* @return the checkOut
*/
public ObjectProperty<LocalDate> getCheckOutProperty() {
return checkOut;
}
public LocalDate getCheckOut() {
return checkOut.getValue();
}
/**
* @param toProperty the checkOut to set
*/
public void setCheckOutProperty(ObjectProperty<LocalDate> toProperty) {
this.checkOut = toProperty;
}
private Integer generateReservationNumber() {
Random random = new Random();
int nextInt = random.nextInt();
return new Integer(nextInt);
}
}
package de.professional\u webworkx.reservationmanager.model;
导入java.time.LocalDate;
导入java.util.Random;
导入javafx.beans.property.IntegerProperty;
导入javafx.beans.property.ObjectProperty;
导入javafx.beans.property.SimpleIntegerProperty;
导入javafx.beans.property.SimpleObject属性;
导入javafx.beans.property.SimpleStringProperty;
导入javafx.beans.property.StringProperty;
/**
*预订实体
*@作者帕特里克·奥特
*@version 1.0
*/
公务舱预订{
私有集成属性reserveNumberProperty;
私有财产客户财产;
私有对象属性签入;
私人财产结帐;
公众保留(){
reserveNumberProperty=新的SimpleIntegerProperty(generateReservationNumber());
customerNameProperty=新的SimpleStringProperty();
签入=新建SimpleObject属性();
checkOut=新的SimpleObject属性();
}
公共预订(最终字符串customerName、最终LocalDate签入、最终LocalDate签出){
reserveNumberProperty=新的SimpleIntegerProperty(generateReservationNumber());
customerName属性=新的SimpleStringProperty(customerName);
this.checkIn=新的SimpleObject属性(checkIn);
this.checkOut=新的SimpleObject属性(checkOut);
}
/**
*@返回reserveNumberProperty
*/
公共IntegerProperty getReserveNumberProperty(){
返回reserveNumberProperty;
}
公共整数getReserveNumber(){
返回reserveNumberProperty.get();
}
/**
*@param reserveNumberProperty要设置的reserveNumberProperty
*/
public void setReserveNumberProperty(IntegerProperty reserveNumberProperty){
this.reserveNumberProperty=reserveNumberProperty;
}
/**
*@返回CustomerName属性
*/
公共StringProperty getCustomerNameProperty(){
归还客户财产;
}
公共字符串getCustomerName(){
返回customerNameProperty.get();
}
/**
*@param customerNameProperty要设置的customerNameProperty
*/
public void setCustomerNameProperty(StringProperty customerNameProperty){
this.customerNameProperty=customerNameProperty;
}
/**
*@返回签入
*/
公共对象属性getCheckInProperty(){
返回签入;
}
public LocalDate getCheckIn(){
返回checkIn.getValue();
}
/**
*@param fromProperty要设置的签入
*/
public void setCheckInProperty(ObjectProperty fromProperty){
this.checkIn=fromProperty;
}
/**
*@退房
*/
公共对象属性getCheckOutProperty(){
退房;
}
public LocalDate getCheckOut(){
返回checkOut.getValue();
}
/**
*@param toProperty要设置的签出
*/
public void setCheckOutProperty(ObjectProperty toProperty){
this.checkOut=TopProperty;
}
专用整数生成器ServationNumber(){
package de.professional_webworkx.reservationmanager.business;
import de.professional_webworkx.reservationmanager.model.Reservation;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
/**
* ReservationService
* persist, query, delete, edit Reservations
* @author Patrick Ott <Patrick.Ott@professional-webworkx.de>
* @version 1.0
*/
public class ReservationService {
public ReservationService() {
super();
}
public List<Reservation> getAllReservations() {
List<Reservation> reservations = new ArrayList<>();
// fetch all reservations from database
reservations.add(new Reservation("Patrick", LocalDate.now(), LocalDate.now().plusWeeks(3)));
reservations.add(new Reservation("userXYZ", LocalDate.now(), LocalDate.now().plusWeeks(2)));
return reservations;
}
}
package de.professional_webworkx.reservationmanager;
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
/**
*
* @author Patrick Ott <Patrick.Ott@professional-webworkx.de>
*/
public class ReservationManager extends Application {
@Override
public void start(Stage primaryStage) throws IOException {
Parent parent = FXMLLoader.load(getClass().getResource("main.fxml"));
Scene scene = new Scene(parent);
primaryStage.setTitle("Hotel Reservation Manager v1.0");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}