如何将点击事件添加到 javafx 中的 tableview 单元格
How to add a click event to a tableview cell in javafx
我的目标是检测用户何时双击 TableView
中的单元格并使用来自该单元格的信息。从我的照片中,您可以看到我将拥有 table 啤酒、啤酒厂和风格。
双击一个单元格后,我想向用户显示一张包含一些信息的图像(啤酒、啤酒厂)。我也在使用场景生成器,所以我正在处理控制器 类。到目前为止,我所拥有的是这个,但没有运气。没有错误,只是在我尝试基本测试时没有提取信息。
仅供参考:我想检测对一个单元格的点击,并且只从点击的单元格中提取信息 - 而不是整行。
这是我的活动代码。
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());
}
});
}
如果您正在使用场景生成器和控制器 class,那么为什么要在该方法上使用 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());
}
}
要实现这一点,您需要存储所有 table 数据。从您的控制器 class 最初为每个单元格的数据创建一个对象。首先在你的控制器顶部写下这一行 class:
ObservableList<TableData> data = FXCollections.observableArrayList();
然后使用循环添加所有 table 数据。这是一个存储一个数据的例子:
data.add(new TableData("Beer","Brewery","Country"));
这里是 TableData
class:
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;
}
}
我的目标是检测用户何时双击 TableView
中的单元格并使用来自该单元格的信息。从我的照片中,您可以看到我将拥有 table 啤酒、啤酒厂和风格。
双击一个单元格后,我想向用户显示一张包含一些信息的图像(啤酒、啤酒厂)。我也在使用场景生成器,所以我正在处理控制器 类。到目前为止,我所拥有的是这个,但没有运气。没有错误,只是在我尝试基本测试时没有提取信息。
仅供参考:我想检测对一个单元格的点击,并且只从点击的单元格中提取信息 - 而不是整行。
这是我的活动代码。
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());
}
});
}
如果您正在使用场景生成器和控制器 class,那么为什么要在该方法上使用 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());
}
}
要实现这一点,您需要存储所有 table 数据。从您的控制器 class 最初为每个单元格的数据创建一个对象。首先在你的控制器顶部写下这一行 class:
ObservableList<TableData> data = FXCollections.observableArrayList();
然后使用循环添加所有 table 数据。这是一个存储一个数据的例子:
data.add(new TableData("Beer","Brewery","Country"));
这里是 TableData
class:
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;
}
}