我很难用ObservableList中获得的数据填充JavaFX中的表视图。
当在病人信息控制器中按下btn确认()时,它会使用病人信息控制器视图中的屏幕文本数据创建一个病人对象。
然后将该对象添加到队列类中的LinkedList队列中。然后返回队列并将其传递给QueueTabPageController方法displayQueue()
我知道,当我将增强的for循环打印到控制台时,患者对象获得了所需的信息。。。
for (Patient patient : queue) {
System.out.println(patient.getFirstName());
System.out.println(patient.getLastName());
System.out.println(patient.getPostCode());
System.out.println(patient.getTriage());
tableData.add(patient);
System.out.println(tableData);
}
但是tableView不显示单元格中的数据。
(我设法从数据库中获得了另一个填充搜索结果的桌面视图,但我被这个难倒了)
任何指导都将不胜感激。谢谢
package controllers;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import app.Patient;
import app.Queue;
import app.Status;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
public class PatientInfoController implements Initializable {
@FXML
private TableView<Patient> personTable;
@FXML
private TableColumn<Patient, String> firstNameColumn;
@FXML
private TableColumn<Patient, String> lastNameColumn;
@FXML
private Label nhsNumberLabel;
@FXML
private Label titleLabel;
@FXML
private Label firstNameLabel;
@FXML
private Label lastNameLabel;
@FXML
private Label streetNumberLabel;
@FXML
private Label streetNameLabel;
@FXML
private Label cityLabel;
@FXML
private Label postCodeLabel;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
assert personTable != null : "fx:id=\"tableView\" was not injected: check your FXML file 'PatientInfoPage.fxml'";
}
/**
* Button to send user back to receptionist homepage
*
* @param event
* @throws IOException
*/
@FXML
private void btnCancel(ActionEvent event) throws IOException {
Stage stage = (Stage) ((Node) (event.getSource())).getScene().getWindow();
stage.close();
}
public static List<Patient> queue;
public static QueueTabPageController queueTabPageController;
/**
* Button to confirm patient and send them to triage/waiting queue
*
* @param event
*/
@FXML
private void btnConfirm(ActionEvent event) {
Stage stage = (Stage) ((Node) (event.getSource())).getScene().getWindow();
// patientservicesclass psc = new patientservicesclass
// test.enqueue("test");
// psc.getPatientById(nhsNumberLabel.getText())
Patient p = new Patient(firstNameLabel.getText(), lastNameLabel.getText(), nhsNumberLabel.getText(),
titleLabel.getText(), streetNumberLabel.getText(), streetNameLabel.getText(), cityLabel.getText(),
postCodeLabel.getText(), Status.EMERGENCY);
queueTabPageController = new QueueTabPageController();
queue = Queue.addToQueue(p);
queueTabPageController.displayQueue(queue);
stage.close();
}
/**
* sets relevant labels to patient information from the database these
* labels are set before screen is changed --- see btnPatientInfo on the
* ReceptionistHomePageController for more info ---
*
* @param patient
*/
public void setPatientInfo(Patient patient) {
nhsNumberLabel.setText(patient.getNhsNumber());
titleLabel.setText(patient.getTitle());
firstNameLabel.setText(patient.getFirstName());
lastNameLabel.setText(patient.getLastName());
streetNumberLabel.setText(patient.getStreetNumber());
streetNameLabel.setText(patient.getStreetName());
cityLabel.setText(patient.getCity());
postCodeLabel.setText(patient.getPostCode());
}
}
。
package app;
import java.util.LinkedList;
import java.util.List;
public class Queue implements Comparable<Patient> {
/**
* linked list of patient objects to represent queue
*/
public static List<Patient> queue = new LinkedList<Patient>();
/**
* method to add a patient to the queue
*
* @param p
*/
public static List<Patient> addToQueue(Patient p) {
// check to see if queue is full
if (queue.size() < 10) {
// add patient if there is room in queue
queue.add(p);
} else {
// queue may be full
System.out.println("Queue is full");
// alert on call team and hospital manager
}
return queue;
//test.displayQueue(queue);
}
/**
* method to remove a patient from the queue
*
* @param p
*/
public static void removefromQueue(Patient p) {
// remove patient from queue
queue.remove(p);
}
/**
* overriden method to allow comparison by triage status
*/
@Override
public int compareTo(Patient o) {
return 0;
}
}
。
package controllers;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import app.Patient;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
public class QueueTabPageController implements Initializable {
@FXML
private TableView<Patient> tableView = new TableView<Patient>();
@FXML
private TableColumn<Patient, String> firstNameColumn;
@FXML
private TableColumn<Patient, String> lastNameColumn;
@FXML
private TableColumn<Patient, String> postCodeColumn;
private ObservableList<Patient> tableData;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
assert tableView != null : "fx:id=\"tableView\" was not injected: check your FXML file 'FXMLQueueTabPage.fxml'";
firstNameColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("firstName"));
lastNameColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("lastName"));
postCodeColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("postCode"));
}
public void displayQueue(List<Patient> queue) {
tableData = FXCollections.observableArrayList();
System.out.println("Starting display queue method in qtc + value of firstNameColumn = " + firstNameColumn);
for (Patient patient : queue) {
System.out.println(patient.getFirstName());
System.out.println(patient.getLastName());
System.out.println(patient.getPostCode());
System.out.println(patient.getTriage());
// tableData.addAll(queue);
tableData.add(patient);
System.out.println(tableData);
}
tableView.setItems(tableData);
refreshTable();
}
void refreshTable() {
final List<Patient> items = tableView.getItems();
if( items == null || items.size() == 0) return;
final Patient item = tableView.getItems().get(0);
items.remove(0);
Platform.runLater(new Runnable(){
@Override
public void run() {
items.add(0, item);
}
});
}
}
。
<?import javafx.scene.shape.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="770.0" prefWidth="1000.0" stylesheets="@../styles/QueueTabPage.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.QueueTabPageController">
<children>
<Rectangle arcHeight="5.0" arcWidth="5.0" fill="#517da6" height="156.0" stroke="BLACK" strokeType="INSIDE" styleClass="rectangle-pane" width="1065.0" />
<Label layoutX="349.0" layoutY="62.0" styleClass="label-queueTitle" stylesheets="@../styles/QueueTabPage.css" text="Accident & Emergency Queue">
<font>
<Font size="30.0" />
</font>
</Label>
<TableView fx:id="tableView" layoutX="242.0" layoutY="276.0" prefHeight="384.0" prefWidth="718.0">
<columns>
<TableColumn fx:id="firstNameColumn" prefWidth="122.0" text="First name" />
<TableColumn fx:id="lastNameColumn" prefWidth="144.0" text="Last name" />
<TableColumn fx:id="postCodeColumn" prefWidth="158.0" text="Time waiting" />
</columns>
</TableView>
</children>
</AnchorPane>
基本上,所发生的是填充并绘制了表视图,但由于这一行:private TableView
@FXML
private TableView<Patient> tableView = new TableView<Patient>();
到
@FXML
private TableView<Patient> tableView;
您应该看到填充的表视图。
我正在为大学做一个项目。我刚刚学习了Java和JavaFX。 我有问题,也许有人能帮我。 有了这个小软件,你可以计划一周的任务。在tableview中,您有星期一到星期五的列。 我有一个数据库,在那里我可以获取对象“auftragsveretilung”(意思是任务,计划在特定日期)。这些对象有一个序列号(=seriennr)和一个日期(=bearbeitungsdatum)。 为了在tablev
问题内容: 我正在尝试使用我的Derby数据库数据填充Netbeans GUI-builder jTable。 我在Account.java类中使用以下代码: 理想情况下,我希望能够返回其中包含参数数据和列的tableModel,因为我知道在GUI中执行此方法是一种不好的做法。在线上的所有教程都没有显示如何将数据发送到另一个类,它们只是在GUI类中执行数据库代码。 我有一个错误,它看不到数据和列,
我在Account.java类中使用以下代码: 理想情况下,我希望能够返回包含参数数据和列的tableModel,因为我知道在我的GUI中使用这种方法是不好的做法。所有在线教程都没有显示如何将数据发送到另一个类,它们只是在GUI类中执行数据库代码。 我有一个错误,它无法看到数据和列,因为它们是在我的方法的一个不可访问的部分中声明和使用的。在我完成这些之后,我需要找到一种方法来将它传递给我的GUI类
虽然这是我配置的用户名,但YES不是我在application.properties文件中提供的密码,也不是我的MySQL工作台密码。如何正确配置Spring Boot应用程序来识别我的MySQL工作台,并用User@Entity JPA注释自动填充TestSchema数据库?
此应用程序将在Person类的帮助下写入和读取csv文件。它不会用数据填充表。我试图在将csv文件加载到list=new ArrayList()的同时执行表的加载,方法是将相同的数据加载到plist=new ArrayList(),然后将此plist传输到data=FXCollections。可观察列表(plist) 请解释此代码失败的地方。是否无法在加载列表ArrayList的同时加载obser
我在NetBeans IDE中工作,语言是Java,主要的类是JFrame Form。 我需要从Jtable获取所有数据并用这些数据填充数组。数组代表矩阵。 代码如下 我有一个错误 线程“AWT-EventQueue-0”java.lang.ClassCastException:java.lang.String无法转换为java.lang.Double 所以将表中的元素设置为双精度不是那么容易吗?