如何将文本添加到TableView中的Label中

时间:2014-05-22 07:13:50

标签: java database javafx label tableview

我有一个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列中嵌入的标签中。任何帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

为什么要将标签放入表格单元格?

首先,TableView可以参数化。

其次,Hibernate应该返回一个带有对象类型的列表。

完成后,您可以使用ObservableList创建FXCollections.observableArrayList(collection);创建完成后,您可以将表格的项目设置为该列表。

在这些对象出现在表格中之后,您需要做的就是实现CellValueFactory

查看Oracle TableView Here.

上的教程