我有一个TableView,其中有一个客户端电子邮件列。在电子邮件列中有一个名为电子邮件的标签,应该根据标签所在的列来填充来自数据库的电子邮件。
到目前为止我的尝试如下:
public class ClientsListTableView {
List clientsTableInitItems = new RetrieveClients().retrieveClients();
private final TableView table;
private Label emails;
public ClientsListTableView(TableView table) {
this.table = table;
this.clientsListTableView();
}
private void clientsListTableView() {
TableColumn clientEmails = new TableColumn();
clientEmails.setMaxWidth(368);
// Client emails column
clientEmails.setCellValueFactory(new PropertyValueFactory<NewClientPOJO, String>("otherNames"));
clientEmails.setCellFactory(new Callback<TableColumn<NewClientPOJO, String>, TableCell<NewClientPOJO, String>>() {
@Override
public TableCell<NewClientPOJO, String> call(TableColumn<NewClientPOJO, String> param) {
final TableCell<NewClientPOJO, String> cell = new TableCell<NewClientPOJO, String>() {
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (!isEmpty()) {
new ClientItemAction();
emails.getStyleClass().add("table-text-allign-top-left");
VBox vbTable = new VBox();
vbTable.getChildren().add(emails);
setGraphic(vbTable);
}
}
};
return cell;
}
});
// Add columns
itemsListsTableView.getColumns().add(clientEmails);
// Add items to TableView and draw
itemsListsTableView.setItems((ObservableList) clientsTableInitItems);
}
// ItemAction Class
private class ClientItemAction extends TableCell<NewClientPOJO, String> {
ClientItemAction() {
this.clientItemAction();
}
VBox vBItemAction = new VBox();
void clientItemAction() {
int selectdIndex = getTableRow().getIndex();
NewClientPOJO selectedRecord = (NewClientPOJO) table.getItems().get(selectdIndex);
new ManageItems().deleteItems(selectedRecord.getClientID(), NewClientPOJO.class);
emails.setText(String.valueOf(selectedRecord.getClientID()));
}
}
}
从类ManageItems
中读取数据库的方法:
/* Method to READ items */
public List<?> listItems(String query) {
List itemsList = null;
try {
session.beginTransaction();
itemsList = session.createQuery(query).list();
} catch (HibernateException e) {
if (session != null) {
// tx.rollback();
}
e.printStackTrace();
} finally {
session.close();
}
return itemsList;
}
但是,我采用这种方法会出现以下错误。
Caused by: java.lang.ClassNotFoundException: wakiliproject.Listings.ClientsListTableView$ClientItemAction
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
请帮我将项目放入TableView列中嵌入的标签中。任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:0)
为什么要将标签放入表格单元格?
首先,TableView
可以参数化。
其次,Hibernate应该返回一个带有对象类型的列表。
完成后,您可以使用ObservableList
创建FXCollections.observableArrayList(collection);
创建完成后,您可以将表格的项目设置为该列表。
在这些对象出现在表格中之后,您需要做的就是实现CellValueFactory
。
查看Oracle TableView
Here.