【问题标题】:How to perform an action by selecting an item from ListView in JavaFX 2如何通过从 JavaFX 2 中的 ListView 中选择项目来执行操作
【发布时间】:2012-09-17 12:23:11
【问题描述】:

当我从 javafx 2 中的 listview 中选择一个项目时,我希望执行一个操作。 我使用 Netbeans JavaFX fxml 应用程序和 SceneBuilder。 SceneBuilder 中的OnMouseClicked 方法不起作用。它给了我一个错误,它找不到我已经声明的方法。

谁能告诉我他们是如何让它工作的?

【问题讨论】:

    标签: javafx-2 javafx


    【解决方案1】:

    您不能单独在 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);
        }
    });
    

    【讨论】:

    • 感谢您的快速答复。但我对 MyDataModel 有疑问。我尝试将它作为一个字符串.. 像 String a = "test";和 ObservableList data = FXCollections.observableArrayList("chocolate", "blue");两者都对我不起作用..它要求上课..你能给我举个例子吗?
    • 两者都为我工作,使用 String 和使用 MyDataModel。对于模型,我还添加了一个 toString() 覆盖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    相关资源
    最近更新 更多