2014-12-02 142 views
0

我在互联网上找到正确的答案,我如何使用ObservableMap填充tableviw作为MapProperty。我想在按值排序的tableview中显示文章。JavaFx:使用ObservableMap填充TableView

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")); 
    } 
    } 
+0

你有没有通过[这个例子]不见了(http://docs.oracle.com/javafx/2/ ui_controls/table-view.htm#CEGHGDFA)? – ItachiUchiha 2014-12-02 05:32:19

+0

是的,但我的问题是,我如何绑定TableView与articleProperty() – 2014-12-02 12:01:59

回答

0

一个这样做的简单的方法就是遍历键集,并创建文章的列表:

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(); 
     } 

    } 
+0

Article art = new Article(key,article.get(key)); Articel没有构造函数。而是列表中每个原始数据的映射。我现在怎么可以用FXML tableView绑定这个列表,我怎样才能排序observableList – 2014-12-02 18:59:37

+1

你必须有一个构造函数,否则你将如何创建Article对象。此外,将表单添加到表的唯一方法是table.setItems(ObservableList