我有一个TableView,它使用ColorPicker来(显示/编辑)单元格中的颜色.该表在所需字段中显示ColorPicker,但编辑不起作用.
TableColumn<SeriesPreferences, Color> c2 = new TableColumn<SeriesPreferences, Color>("Color");
c2.setCellValueFactory(new PropertyValueFactory<SeriesPreferences, Color>("color"));
c2.setCellFactory(new Callback<TableColumn<SeriesPreferences, Color>,
TableCell<SeriesPreferences, Color>>()
{
@Override
public TableCell<SeriesPreferences, Color>
call(final TableColumn<SeriesPreferences, Color> param)
{
TableCell<SeriesPreferences, Color> cell =
new TableCell<SeriesPreferences, Color>()
{
@Override
public void updateItem(Color c, boolean empty)
{
if(c != null)
{
final ColorPicker cp = new ColorPicker();
cp.setValue(c);
setGraphic(cp);
cp.setOnAction(new EventHandler<javafx.event.ActionEvent>()
{
public void
handle(javafx.event.ActionEvent t)
{
getTableView().edit(getTableRow().getIndex(), param);
commitEdit(cp.getValue());
}
});
}
}
};
return cell;
}
});
c2.setOnEditCommit(new EventHandler<CellEditEvent<SeriesPreferences, Color>>()
{
@Override
public void handle(CellEditEvent<SeriesPreferences, Color> t)
{
((SeriesPreferences) t.getTableView().getItems().get(t.getTablePosition().
getRow())).setColor(t.getNewValue());
}
});
Run Code Online (Sandbox Code Playgroud)
当我更改颜色选择器中的颜色时,没有调用编辑事件处理程序,任何想法?
好吧,我对这个话题进行了一些调查,因为我也遇到了同样的问题。我想说 JavaFX 根本无法使用。
我查看了其他人如何实现他们的单元格,关键是它们都使用了可以用字符串表示的东西。现在,Java 始终如此:按照 Java 的方式进行操作,否则就被独自留在雨中。目前 JavaFX 的文档非常糟糕,所以我必须尝试直到它起作用。
所以:要触发editCommit- 事件,您必须setContentDisplay(ContentDisplay. TEXT_ONLY)调用updateItem(). 如果想要将数据显示为字符串,那么效果很好,但在像这样的情况下完全失败,其中颜色选择器只完成这项工作。
或者,也可以手动触发事件。但是如何获得桌子位置呢?我不知道。
| 归档时间: |
|
| 查看次数: |
2532 次 |
| 最近记录: |