Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database JavaFX PropertyValueFactory与其他控件绑定TableView_Database_Binding_Javafx_Controls_Tableview - Fatal编程技术网

Database JavaFX PropertyValueFactory与其他控件绑定TableView

Database JavaFX PropertyValueFactory与其他控件绑定TableView,database,binding,javafx,controls,tableview,Database,Binding,Javafx,Controls,Tableview,大家好, 我只是有一个关于数据库绑定实现的正确方法的简单问题 我得到了一个由数据库填充的TableView。数据库创建“输入”JavaFXPOJO对象并将其传递给Tableview 在第一次需要时,我必须将“ID”链接到TableView数据。我成功的唯一方法是添加一个隐藏列。但有没有更好的方法来实现这一点(TableView Id数据库绑定),而不创建隐藏列 第二个需要是显示一个输入数据,它是一个长的VARCHAR,我不想在TableView后面的文本区域显示它。此TexArea数据应绑定到T

大家好,

我只是有一个关于数据库绑定实现的正确方法的简单问题

我得到了一个由数据库填充的TableView。数据库创建“输入”JavaFXPOJO对象并将其传递给Tableview

在第一次需要时,我必须将“ID”链接到TableView数据。我成功的唯一方法是添加一个隐藏列。但有没有更好的方法来实现这一点(TableView Id数据库绑定),而不创建隐藏列

第二个需要是显示一个输入数据,它是一个长的VARCHAR,我不想在TableView后面的文本区域显示它。此TexArea数据应绑定到TableView的“输入”JavaFX POJO对象,以执行添加/更新/保存操作

有没有一种正确的方法可以在不使用隐藏列和将这些列绑定到其他控件的情况下实现这一点,或者这是唯一的方法

如果这是唯一的方法,是否有可能从此方法设置的TableView菜单中删除隐藏的TableColumns?“tableView.setTableMenuButtonVisible(true)”

解决方案可能与下面的代码类似,但我想知道它是否是一种好的/最佳实践,是否是一种常见的实现,以及是否有其他方法不使用隐藏列绑定两个控件:

inputsTable.setOnMouseClicked(new EventHandler<MouseEvent>() {
              @Override
                public void handle(MouseEvent mouseEvent) {
                  if (mouseEvent.getButton().equals(MouseButton.PRIMARY)) {
                    if (mouseEvent.getClickCount() == 1) {
                        Inputs input= inputsTable.getSelectionModel().getSelectedItem();
                       if(input != null){  
                           colNote.textProperty().unbindBidirectional(input.noteProperty());
                           colNote.setText("");
                        }
                       colNote.textProperty().bindBidirectional(input.noteProperty());

                  }
                }
              }
            });
inputsTable.setOnMouseClicked(新的EventHandler(){
@凌驾
公共无效句柄(MouseEvent MouseEvent){
if(mouseEvent.getButton().equals(MouseButton.PRIMARY)){
如果(mouseEvent.getClickCount()==1){
Inputs input=inputsTable.getSelectionModel().getSelectedItem();
如果(输入!=null){
colNote.textProperty().unbindBidirectional(input.noteProperty());
colNote.setText(“”);
}
colNote.textProperty().bindproductive(input.noteProperty());
}
}
}
});
以下是有助于理解的视图: 谢谢你阅读我,如果你需要一些示例代码,我可以添加一些

谢谢大家,问候。


[编辑]我认为这实际上是一个错误的问题;当我将Inputs的POJO传递给Tableview时,对象的ID被设置,所以我只需要执行
inputsTable.getSelectionModel().getSelectedItem().getId()
来检索ID。或者,另一种方法是绑定一个可观察的整数,该整数可以被整个应用程序访问,并在
inputsTable.getSelectionModel()中设置.selectedItemProperty().addListener(new ChangeListener(){….}
event…谢谢大家,尊敬的。

您可以使用
col.setVisible(false)
如果您不需要它,您甚至不必将其添加到TableView。我不太理解问题的其余部分。对于绑定到TextArea,我刚刚发布了一个绑定到TextField的小示例Hi Brian,谢谢您的帖子,它回答了我的第二个问题。我自己实现了它,但使用J更好avaFX绑定类:-)尝试绑定时未成功,因为我绑定的是tableView getselectedItem的属性,而不是直接使用“旧/新”属性的对象。。。你的帖子很有用;非常感谢,问候。