编程语言
首页 > 编程语言> > 如何在javafx中将click事件添加到tableview单元格

如何在javafx中将click事件添加到tableview单元格

作者:互联网

参见英文答案 > Detect doubleclick on row of TableView JavaFX                                    5个
我的目标是检测用户何时双击TableView中的单元格并使用该单元格中的信息.从我的照片中你可以看到我将有一张啤酒,啤酒厂和风格的桌子.

双击一个单元格后,我想向用户显示一些图像(啤酒,啤酒厂)和一些信息.我也在使用场景构建器,所以我正在处理控制器类.到目前为止我所拥有的是这个,但没有运气.没有错误,只是在我尝试基本测试时没有提取信息.

仅供参考:我想检测一个单元格上的点击,并且仅从单击的单元格中拉取信息 – 而不是整行.

screenshot of table with beers and breweries

这是我的活动代码.

public void clickItem(MouseEvent event) {
    tableID.setOnMouseClicked(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            System.out.println("Clicked on " + (tableID.getSelectionModel().getSelectedCells().get(0)).getColumn());        
        }
    });
}

解决方法:

如果您正在使用场景构建器&控制器类,那么为什么你在该方法上使用setOnMouseClicked?而不是尝试这个:

@FXML
public void clickItem(MouseEvent event)
{
    if (event.getClickCount() == 2) //Checking double click
    {
        System.out.println(tableID.getSelectionModel().getSelectedItem().getBeer());
        System.out.println(tableID.getSelectionModel().getSelectedItem().getBrewery());
        System.out.println(tableID.getSelectionModel().getSelectedItem().getCountry());
    }
}

要实现这一点,您需要存储所有表数据.从控制器类开始,为每个单元的数据创建一个对象.首先写下控制器类的这一行:

ObservableList<TableData> data = FXCollections.observableArrayList();

然后使用循环添加所有表数据.以下是存储一个数据的示例:

data.add(new TableData("Beer","Brewery","Country"));

这是TableData类:

public class TableData
{
    String beer;
    String brewery;
    String country;

    public TableData(String beer, String brewery, String country)
    {
        super();
        this.beer = beer;
        this.brewery = brewery;
        this.country = country;
    }

    public String getBeer()
    {
        return beer;
    }
    public String getBrewery()
    {
        return brewery;
    }
    public String getCountry()
    {
        return country;
    }

}

标签:java,user-interface,javafx,tableview,scenebuilder
来源: https://codeday.me/bug/20190611/1219863.html