JavaFx: populate TableView with ObservableMap



我在互联网上找不到正确的答案,我怎样才能用ObservableMap填充tableviw作为MapProperty。我想在按值排序的表格视图中显示文章。

public class Article {
    private MapProperty<String, Integer> article = new SimpleMapProperty<>(); 

        public final ObservableMap<String, Integer> geArticle() {
            return article.get();
        }
        public final void setArticle(ObservableMap<String, Integer> value) {
            article.set(value);
        }
        public MapProperty<String, Integer> articleProperty() {
            return article;
        }
    }

 public class TableController extends VBox implements Initializable{
    @FXML private TableView<Article> tableView;
    @FXML private TableColumn<Article, String> article;
    @FXML private TableColumn<Article, Integer> count;
    ......
    @Override
        public void initialize(URL location, ResourceBundle resources) {
            article.setCellValueFactory(new PropertyValueFactory<Article, String>("article"));
            count.setCellValueFactory(new PropertyValueFactory<Article, Integer>("count"));
    }
  }

执行此操作的一种简单方法是遍历键集并创建文章列表:

ObservableList<Article> list =  FXCollections.observableArrayList();
    for(String key : article.keySet()){
        Article art = new Article(key, article.get(key));
        list.add(art);
    }

然后,您将表"项目"设置为list

如果要对列表进行排序,请在文章中实现可比较,并使用collections.sort(list);

public class Article implements Comparable<Article> {
       //...
        public int compareTo(Article compareArticle ) {
              //ascending order
              return this.value - compareArticle.getValue();
        }
    }

最新更新