我有一个TableView,它几乎没有可编辑的列。在JavaFX Scene Builder for editable table列的on Edit Commit中,我映射了一个FXML控制器方法,它调用DAO服务从数据库返回数据。问题是编辑表格单元格后,未调用事件处理程序方法。我希望在编辑单元格数据后按Tab键时触发此事件。怎么做?请建议
在这方面浪费了一天的大部分时间,在互联网上搜寻那些几乎说了同样的话,并且都在做我已经在做的事情的例子,这就是我发现的:
编辑TextFieldTableCell单元格中的值时,必须按enter键才能进行编辑提交。如果您在单元格外单击tab键,则单元格仍处于编辑模式(您可以继续按tab键以返回单元格的文本字段,如果您只需从单元格外单击,则会调用TextFieldTableCell的cancelEdit方法,从而取消编辑:-(
这是我用来从桌面视图的可编辑单元格中调用我的DAO的东西。
private TableColumn<Person, String> createNameCol(){
TableColumn col = new TableColumn("Name");
col.setCellValueFactory(
new PropertyValueFactory<Person, String>("name"));
col.setCellFactory(TextFieldTableCell.forTableColumn());
col.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent<Person, String>>() {
@Override
public void handle(TableColumn.CellEditEvent<Person, String> t) {
Person p = t.getRowValue();
p.setName(t.getNewValue());
sl.update(p); // This is where I call the update method from my DAO.
}
});
return col;
}
如果这不起作用,请发布您的代码。
编辑:
下面是一个关于可编辑表格视图的好教程
我对CheckBoxTableCell和DatePickerTableCell和ColorPickerTableCells有同样的问题:-(
我是这样处理的:在控件的事件上,我取回了“((输入)getTableView(). getItems(). get(getTableRow(). getIndex()”使用的POJO对象,我更新了类似的内容,就像它是在OnEditCommit方法中完成的一样...
所以对我来说是这样的(更新颜色):
((Inputs) getTableView().getItems().get(
getTableRow().getIndex())
).setColor(cp.getValue());
下面是ColorPickerCell的示例:
public class ColorPickerTableCell<Inputs> extends TableCell<Inputs, Color>{
private ColorPicker cp;
public ColorPickerTableCell(){
cp = new ColorPicker();
cp.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
commitEdit(cp.getValue());
updateItem(cp.getValue(), isEmpty());
((Inputs) getTableView().getItems().get(
getTableRow().getIndex())
).setColor(cp.getValue());
}
});
setGraphic(cp);
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
setEditable(true);
}
@Override
protected void updateItem(Color item, boolean empty) {
super.updateItem(item, empty);
cp.setVisible(!empty);
this.setItem(item);
cp.setValue(item);
}
}
使用这个简单的JavaFX的POJO:
public ObjectProperty<Color> color = new SimpleObjectProperty<Color>();
this.color = new SimpleObjectProperty(color);
public ObjectProperty<Color> colorProperty() {
return color;
}
public void setColor(Color color2) {
color.set(color2);
}
我不知道这是否是一个很好的方法,但它为我工作。。。请注意,JavaFX的POJO只能在“ActionEvent”请求(combobox、datepicker、colorpicker等)中访问
当做
问题内容: 我正在尝试用Java编写程序来管理我的Bookie帐户。我是java的新手,所以我认为我会选择一些简单的方法来了解事情的原理。我决定使用表格视图并使各个单元格可编辑。我一直在关注本教程http://java- buddy.blogspot.co.uk/2012/04/javafx-2-editable-tableview.html 。它详细说明了如何使用Java代码执行此操作,并将其复
问题内容: 我想根据第1列中的值给表格单元格上色,如果值不等于第1列中的值,则颜色应为青色,但我的代码不起作用: 问题答案: 是否必须突出显示单元格的决定必须在TableCellRenderer中进行。它不能在JTable中进行。因此,(没有)没有理由要重写JTable中的方法。相反,您可以将列的CellRenderer设置为TableCellRenderer的自己实现。 在此示例中,列2和3接收
Option 事件 jQuery 事件 参数 描述 onAll all.bs.table name, args 所有的事件都会触发该事件,参数包括: name:事件名, args:事件的参数。 onClickRow click-row.bs.table row, $element 当用户点击某一行的时候触发,参数包括: row:点击行的数据, $element:tr 元素, field:点击列的
我有一个表视图,其中很少有列是可编辑的,也很少有不可编辑的。当我在第一列中输入一些值并按tab键时,将调用一个服务,返回的对象将映射到表行。我的要求是根据返回对象中的标志将不可编辑列设置为可编辑(仅在我编辑过的行中)。下面是调用服务并将返回的对象设置为行的代码。 请建议如何在运行时根据标志将不可编辑的列转换为可编辑的列。
问题内容: 我试图让表单元格在创建新行时显示字符串。但是所有行都是空的。有人知道我在做什么错吗?这是主要的类:包应用程序; 这是正常的并且可以正常工作,所以我认为您不必为此担心。 这是控制器类。我认为问题可能出在哪里。 这也是tableviewer所需的表类 你们知道什么地方可能出错,或者建议我如何只添加tableviewer,使其代码仍可与SceneBuilder中的其余fxml文件一起使用?
我把网格窗格设置得很好。但如何在每个单元格中放置事件处理程序?就像鼠标双击和右键单击一样。谁能给我举个例子吗?非常感谢。