【发布时间】:2012-09-17 12:23:11
【问题描述】:
当我从 javafx 2 中的 listview 中选择一个项目时,我希望执行一个操作。
我使用 Netbeans JavaFX fxml 应用程序和 SceneBuilder。
SceneBuilder 中的OnMouseClicked 方法不起作用。它给了我一个错误,它找不到我已经声明的方法。
谁能告诉我他们是如何让它工作的?
【问题讨论】:
当我从 javafx 2 中的 listview 中选择一个项目时,我希望执行一个操作。
我使用 Netbeans JavaFX fxml 应用程序和 SceneBuilder。
SceneBuilder 中的OnMouseClicked 方法不起作用。它给了我一个错误,它找不到我已经声明的方法。
谁能告诉我他们是如何让它工作的?
【问题讨论】:
您不能单独在 FXML 文件中执行此操作。
在FXML文件的Controller类中定义对应的listView(假设FXML中为fx:id="myListView"):
@FXML
private ListView<MyDataModel> myListView;
在 init/start 方法中添加监听器,它将监听列表视图项的变化:
myListView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<MyDataModel>() {
@Override
public void changed(ObservableValue<? extends MyDataModel> observable, MyDataModel oldValue, MyDataModel newValue) {
// Your action here
System.out.println("Selected item: " + newValue);
}
});
MyDataModel 可以是您自己的数据结构模型类,也可以只是一个String。
以字符串为例,
@FXML
private ListView<String> myListView;
...
...
ObservableList<String> data = FXCollections.observableArrayList("chocolate", "blue");
myListView.setItems(data);
myListView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
// Your action here
System.out.println("Selected item: " + newValue);
}
});
【讨论】: