2016-04-30 319 views
3

我的目标是检测用户何时双击TableView中的单元格并使用该单元格中的信息。从我的照片中你可以看到我将有一张啤酒,啤酒和风格的桌子。如何将点击事件添加到javafx中的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());   
     } 
    }); 
} 
+1

你的意思是你没有看到'println'当点击?你的方法看起来有点奇怪。你还可以将代码片段发布到哪里?什么是'tableID'?它看起来有点像当你点击注册事件处理程序的项目时。 – hotzst

+0

是的,一旦点击,我看不到println。我调整了代码,但仍然没有运气。这只是为了测试点击功能,因为我正在使用数据库,一旦它检测到两次点击,我会将数据库中的信息提取到java应用程序中,并将其显示在文本区域中。 – Jonathan

回答

5

如果您正在使用场景生成器&控制器类,那么为什么你正在使用这个方法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; 
    } 

} 
+0

当我到达我的电脑并让你知道时,我会尝试它。而对于桌子,我已经有一个建造了,谢谢你,但为班! – Jonathan

+0

没有这个运气,仍然没有看到println。林不太确定这是什么错误,它没有被打印或没有得到选定的单元格。 – Jonathan

+0

编辑***我道歉,这完美的作品。我将scenebuilder fxml文件保存到不同的位置,直到现在才意识到。非常感谢你!但出于好奇,我会改变什么,以便它在双击时只返回啤酒名称值。例如,如果我点击任何其他列,它会返回啤酒名称,即使我点击下啤酒厂或国家。谢谢 – Jonathan

相关问题