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表示是單擊