【问题标题】:How to add a click event to a tableview cell in javafx [duplicate]如何将点击事件添加到javafx中的tableview单元格[重复]
【发布时间】:2016-08-25 07:27:51
【问题描述】:

我的目标是检测用户何时双击TableView 中的单元格并使用该单元格中的信息。从我的图片中,您可以看到我将有一张啤酒、啤酒厂和风格的桌子。

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

仅供参考:我想检测对一个单元格的点击,并且只从点击的单元格中提取信息 - 而不是整行。

这是我的活动代码。

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());        
        }
    });
}

【问题讨论】:

  • 您的意思是点击时看不到println?你的方法看起来有点奇怪。您还可以在调用它的地方发布代码片段吗? tableID 是什么?它看起来有点像当你点击一个你注册事件处理程序的项目时。
  • 是的,一旦点击,我就看不到 println。我调整了代码,但仍然没有运气。这只是为了在我使用数据库时测试点击功能,一旦它检测到两次点击,我会将信息从数据库中提取到 java 应用程序中并显示在文本区域中。

标签: java user-interface javafx tableview scenebuilder


【解决方案1】:

如果您使用的是场景构建器和控制器类,那么为什么要在该方法上使用 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;
    }

}

【讨论】:

  • 我会在我拿到我的电脑后尝试一下并告诉你。对于这张桌子,我已经做了一张,谢谢你的课!
  • 运气不好,仍然看不到 println。我不太确定它没有被打印或没有得到选定的单元格有什么问题。
  • EDIT*** 我很抱歉,这非常有效。我正在将我的 scenebuilder fxml 文件保存到不同的位置,直到现在才意识到。非常感谢!但出于好奇,我会改变什么以便它在双击时只返回啤酒名称值。例如,如果我点击任何其他列,即使我点击了啤酒厂或国家,它也会返回啤酒名称。谢谢
  • tableID.getSelectionModel().getSelectedItem() 返回该行/单元格上的所有可用数据(在您的情况下为啤酒、啤酒厂、国家、ABV 和风格)。当我们添加.getBeer() 时,它返回的是啤酒的字符串值,我们通过创建TableData 类的对象来存储它。因此,当您单击该行的任何列时,您将仅通过该行获得 Beer 列的字符串值:tableID.getSelectionModel().getSelectedItem().getBeer()
  • 是的,但是一旦单击另一列,例如在 abv 下,它仍然会返回我只想在单击啤酒名称列下时返回的啤酒名称。但我通过一些尝试弄明白了。感谢您所做的一切,尽管您很有帮助!
猜你喜欢
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 2020-07-04
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多