javafx的tableview可以比较方便地创建出外观还行的列表,但是有一个常见的需求,就是用户点击table中的表项做选择,但是编辑器没办法实现这个需求,需要我们自己写控制器
假设表项对象叫Stream
@FXML
TableView<Stream> streamListTable;
然后在初始化的函数中:
streamListTable.setRowFactory(new Callback<TableView<Stream>, TableRow<Stream>>() {
@Override
public TableRow<Stream> call(TableView<Stream> param) {
return new TableRowControl();
}
});
然后创建一个新的类:
class TableRowControl extends TableRow<Stream> {
public TableRowControl() {
super();
this.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.getButton().equals(MouseButton.PRIMARY)
&& event.getClickCount() == 1
&& TableRowControl.this.getIndex() < streamListTable.getItems().size()) {
choosedStream = TableRowControl.this.getItem();//获取点击的对象
choosedIndex=TableRowControl.this.getIndex();//获取点击的index,就是表上的第几项
}
}
});
}
}
event.getClickCount() == 1表示是单击