【问题标题】:How to select multiple items from a List view - JavaFX 8如何从列表视图中选择多个项目 - JavaFX 8
【发布时间】:2015-06-02 22:37:40
【问题描述】:

我是使用JavaFX 的新手,我正在尝试将ObservableList 添加到表视图中。 该列表仅包含字符串。

我的目标是显示已连接设备的列表并让用户选择执行操作(1 个或多个),有没有更好的方法来实现这一点?

编辑: 我已更改为 ListView,现在它显示了列表,如何从选定的项目创建新列表?

【问题讨论】:

  • 为什么不只是一个ListView
  • 也是一个我只是喜欢更好地查看表格视图的选项,如何从 ListView 中选择项目?
  • 我认为单列表格视图看起来很像列表。您使用 listView.getSelectionModel().getSelectedItem() ,甚至更好地为 selectedItem 属性添加一个侦听器。 TableView 也是如此。
  • @brain 谢谢我已更改为列表视图,现在它显示 ObservableList 我不了解侦听器部分,如何从所选项目创建新列表?

标签: java javafx tableview


【解决方案1】:

这是一个基于您的 cmets 的示例

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.control.SelectionMode;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class ListSelect extends Application {

    @Override
    public void start(Stage stage) {
        ObservableList<String> items = FXCollections.observableArrayList(
                "one","two","three","four","five","six","seven");
        ListView<String> list = new ListView<>(items);
        ListView<String> selected = new ListView<>();
        HBox root = new HBox(list, selected);
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();

        //set this to SINGLE to allow selecting just one item
        list.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
        list.getSelectionModel().selectedItemProperty().addListener((obs,ov,nv)->{
            selected.setItems(list.getSelectionModel().getSelectedItems());
        });
    }

    public static void main(String[] args) {launch(args);}

}

【讨论】:

【解决方案2】:

如果您正在寻找不使用 Java 的新 Lamba 和相关功能的解决方案,请点击此处:

在我的示例中,假设表设置为使用任意类 Person,该类定义了名字、姓氏和电子邮件。

//Set the table to multi selection mode
table.getSelectionModel().setSelectionMode( SelectionMode.MULTIPLE);

//Regiseter the listener on the ObervableList<Person>
table.getSelectionModel().getSelectedItems().addListener(multiSelection);


  /**A listener for list selections, multiple selections in the TableView**/
     ListChangeListener< Person> multiSelection = new ListChangeListener<Person>(){
        @Override
        public void onChanged(  ListChangeListener.Change<? extends Person> changed){
            for( Person p : changed.getList())
                System.out.println(p);
        } 
     };

【讨论】:

  • 这就是我要找的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多