首页 文章

JavaFX8:TableView中不显示字符串

提问于
浏览
1

我有以下问题:我尝试用数组填充JavaFX8中的tableview . 所以,我尝试将数组作为一行添加到tableview中 . 当按下enter时,我在我的FXML文件的Controller中运行此代码 . 这是代码:

String[] words = {"ace", "boom", "crew", "dog", "eon"}; 
List<String> tableViewRow = Arrays.asList(words); 
ObservableList<String> row = FXCollections.observableList(tableViewRow); //observableArrayList also doesn't work
transactionOverview.getItems().add(row);

transactionOverview是我的tableview,String []只是我实际的String []的占位符 . 我尝试以多种方式创建我的tableview:

public TableView<ObservableList<String>> transactionOverview;
public TableView<ObservableList> transactionOverview;
public TableView transactionOverview;

它们都不起作用 . 问题是tableview获得了一个额外的行,我可以选择,但现在在tableview中可以看到字符串值 . 我不知道他们是否被添加 .

我的代码基于Javafx 2.2 - Dynamic table view - table data(来自Jitendra Pareek的答案),我选择了这个解决方案,因为我不想使用额外的类来填充我的tableview .

任何帮助表示赞赏!

1 回答

  • 1

    由于(根据您的评论)您有固定数量的列,我强烈建议您创建一个模型类来保存表格每行中的项目 . 然后,您可以遵循标准模式,它应该很容易 .

    但是,如果您管理 TableView ,则必须为每列提供单元格值工厂 . 这本质上是一个函数,它指定如何从行中的项获取单元格的值 . 如果您使用的是使用JavaFX属性的模型类,那么您可以使用 PropertyValueFactory (尽管Java 8 lambda表达式使其非常冗余) . 否则,您需要实现回调 .

    如果你真的想使用列表结构来保存每一行的数据,并假设你的表和表列都在FXML文件中定义,你可以在你的控制器类中做这样的事情:

    @FXML
    private TableView<ObservableList<String>> transactionOverview ;
    
    // ...
    
    public void initialize() {
        for (int i=0; i < transactionOverview.getColumns().size(); i++) {
            TableColumn<ObservableList<String>, String> col = transactionOverview.getColumns().get(i);
            final int colIndex = i ;
            col.setCellValueFactory( (CellDataFeatures cellData) -> {
                ObservableList<String> rowData = cellData.getValue();
                return new ReadOnlyStringWrapper(rowData.get(colIndex));
            });
        }
    
        // ...
    }
    

相关问题