我有一个Listview,用Fxml制作,其中的元素是通过一个可观察的列表添加的。我想,当用户双击某个节点时,获取有关该节点的数据。我已经处理了双击和其他所有内容,但是我需要获取被点击的节点的名称才能从hashmap中获取数据等等......我尝试使用if(e.getTarget() == ListCell)
但它告诉我“表达预期”就好像它是一个枚举。
我知道某个地方可能有重复,但我找不到任何问题的表述......所以,我问你,我怎么得到节点的名称并检查是否点击发生在节点上或“列表视图的空白”中。
编辑:按名称,我的意思是显示名称。
答案 0 :(得分:0)
这是实现我认为你要问的一种方法。这会使用setOnMouseClicked
中的setCellFactory
。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class ListViewExperiments extends Application
{
@Override
public void start(Stage primaryStage) throws Exception
{
primaryStage.setTitle("ListView Experiment 1");
Label label = new Label("Hello World!");
ListView<Person> listView = new ListView();
listView.setCellFactory(lv -> new ListCell<Person>()
{
@Override
public void updateItem(Person item, boolean empty)
{
super.updateItem(item, empty);
if (empty) {
setText(null);
setOnMouseClicked(null);
}
else {
setText(item.getFirstName() + " " + item.getLastName());
setOnMouseClicked(event -> {
if (event.getClickCount() == 2) {
label.setText(item.getFirstName() + item.getLastName());
}
});
}
}
});
listView.getItems().add(new Person("a", "b"));
listView.getItems().add(new Person("c", "d"));
listView.getItems().add(new Person("e", "f"));
VBox vBox = new VBox(listView, label);
Scene scene = new Scene(vBox, 300, 120);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args)
{
Application.launch(args);
}
}