javafx tableview 如何获取我单击的行? [英] javafx tableview how to get the row I clicked?

查看:54
本文介绍了javafx tableview 如何获取我单击的行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码

// this event is attached to TableCell
public EventHandler dblclickDescription = new EventHandler<MouseEvent>(){
    @Override
    public void handle(MouseEvent event) {
        if(event.getButton().equals(MouseButton.PRIMARY)){
            if(event.getClickCount() == 2){
                printRow(event.getTarget());
            }
        }
        event.consume();
    }
};

// print row
public void printRow(Object o){
    Text text = (Text) o;

    // ??? don't know what to write here

   System.out.println(row.toString());
}

1) 如何从我点击的单元格到行?

1) how do I get from the cell I clicked to the row?

2) 我可以将事件附加到整行而不是每一列吗?

2) can I attach the event to the whole row instead of each column?

3) 我以为我在 TableCell

TableCell cell = TableColumn.DEFAULT_CELL_FACTORY.call(p);
cell.setOnMouseClicked(dblclickDescription);

但是当我测试时,

event.getSource();// is a TableColumn
event.getTarget();// is a Text if clicked on text
event.getTarget();// is a TableColumn if clicked on empty space, even if that cell has text

有没有办法从MouseEvent获取TableCell?

推荐答案

回答您的具体问题:

如何从我点击的单元格到该行?

how do I get from the cell I clicked to the row?

TableCell 定义了一个 getTableRow() 方法,返回TableRow.所以你可以这样做

TableCell defines a getTableRow() method, returning the TableRow. So you can do

Object item = cell.getTableRow().getItem();

它将为您提供表格中的行项目(即 table.getItems() 的正确元素).如果您愿意,也可以从 table.getItems().get(cell.getIndex()) 获取此信息.

which will give you the row item from the table (i.e. the correct element of table.getItems()). You can also get this from table.getItems().get(cell.getIndex()) if you prefer.

我可以将事件附加到整行而不是每一列吗?

can I attach the event to the whole row instead of each column?

是的.定义一个 rowFactory:

TableView<MyDataType> table = new TableView<>();

table.setRowFactory(tv -> {
    TableRow<MyDataType> row = new TableRow<>();
    row.setOnMouseClicked(event -> {
        if (! row.isEmpty() && event.getButton()==MouseButton.PRIMARY 
             && event.getClickCount() == 2) {

            MyDataType clickedRow = row.getItem();
            printRow(clickedRow);
        }
    });
    return row ;
});

// ...

private void printRow(MyDataType item) {
    // ...
}

这篇关于javafx tableview 如何获取我单击的行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆