Ago*_*noX 18 tableview javafx-2
给定一个TableView,我需要检测单元格上的双击.
tableView.setOnMouseClicked(new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent event)
{
if(event.getClickCount()>1)
{
System.out.println("double clicked!");
}
}
});
Run Code Online (Sandbox Code Playgroud)
如何确定单击鼠标的单元格?
Ulu*_*Biy 30
代码示例.
运行"示例12-11:编辑替代解决方案单元格的"的官方的tableview教程.
替换以下内容:
table.setEditable(false);
Callback<TableColumn, TableCell> cellFactory =
new Callback<TableColumn, TableCell>() {
public TableCell call(TableColumn p) {
TableCell cell = new TableCell<Person, String>() {
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? null : getString());
setGraphic(null);
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
};
cell.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.getClickCount() > 1) {
System.out.println("double clicked!");
TableCell c = (TableCell) event.getSource();
System.out.println("Cell text: " + c.getText());
}
}
});
return cell;
}
};
Run Code Online (Sandbox Code Playgroud)
没有必要,EditingCell因为你的细胞是不可编辑的.单元工厂用于单元渲染.因此,可以Labeled使用cell的setGraphics()方法将任何节点/控件置于默认值之外.IMO您无法直接访问默认单元格,因此您应该定义自己的单元工厂,以便能够在单元格上放置事件过滤器.
JavaFX允许您为每个单元设置多个侦听器(我不是说这是好是坏,只是可以)。如果您将代码设置为对特定列/行执行对特定侦听器的响应,则每个侦听器都将执行您的代码。为了捕获单元格鼠标的点击,我使用以下命令:
table.setEditable(true);
table.getSelectionModel().setCellSelectionEnabled(true); // selects cell only, not the whole row
table.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent click) {
if (click.getClickCount() == 2) {
@SuppressWarnings("rawtypes")
TablePosition pos = table.getSelectionModel().getSelectedCells().get(0);
int row = pos.getRow();
int col = pos.getColumn();
@SuppressWarnings("rawtypes")
TableColumn column = pos.getTableColumn();
String val = column.getCellData(row).toString(); System.out.println("Selected Value, " + val + ", Column: " + col + ", Row: " + row);
if ( col == 2 ) { ... do something ... }
if ( col == 5 ) { ... do something ... }
if ( col == 6 ) { ... do something ... }
if ( col == 8 ) { ... do something ... }
}
}
});
Run Code Online (Sandbox Code Playgroud)
您可以从上面的代码中看到,我想基于鼠标单击来做某事的列上有代码:
if ( col == <int> ) { ... do something ... }
我还将这些列设置为不允许编辑:
thisCol.setEditable(false);
我要编辑的行具有.setEditable(true)但没有响应,但单击鼠标却没有响应。
单元格编辑默认为2次鼠标单击。您可以更改上面的代码以捕获单元格上的不同鼠标事件,因此仍然可以通过单击两次鼠标来编辑单元格,或者使用您确定的任何其他鼠标事件来打开URL,对话框等。通过TableView,您可以根据自己的想象力和编程技能来确定自己的功能。您不必担心“我可以编辑它,也可以用它触发鼠标事件”。你可以两者都做:)
| 归档时间: |
|
| 查看次数: |
29020 次 |
| 最近记录: |