Javafx - 我无法将数据导入TableView

时间:2016-05-10 21:05:47

标签: java javafx tableview

我无法使用自己的数据填充JavaFX TableView对象。我试图修改the code found here以满足我的计划的需要。 我添加了该教程中使用的表格,并且显示正确。我复制了该代码以创建第二个表,但无法将我的数据显示在第二个表中。

我相信我已正确修改代码以接受来自SNMPInterface类的数据。我尝试使用静态数据填充表格,稍后从文件中读取数据。这两个过程都不​​起作用,但两者都会创建具有正确标题的列。

My full project can be found on GitHub

最初,我创建了一个' SNMPInterface'的TableView对象。类对象:

private TableView< SNMPInterface > interfaceTableView = new TableView<>();

然后我创建一个SNMPInterface对象的ObservableList:

private final ObservableList< SNMPInterface > interfaceData =
        FXCollections.observableArrayList(
            new SNMPInterface( "99", "testlo" ),
            new SNMPInterface( "98", "testeth1" ),
            new SNMPInterface( "97", "testeth2" ),
            new SNMPInterface( "96", "testbond0" )
        );

稍后,我为&#39; ifIndex&#39;创建了一个列。数据成员:

TableColumn< SNMPInterface, String > ifIndexCol = new TableColumn<>( "Index" );
ifIndexCol.setCellValueFactory( new PropertyValueFactory<>( "ifIndex" ) );

...以及&#39; ifDescr&#39;:

的第二列
TableColumn ifDescrCol = new TableColumn( "Description" );
ifDescrCol.setCellValueFactory( new PropertyValueFactory<>( "ifDescr" ) );

然后我尝试将它添加到GridPane(名为rootNode):

interfaceTableView.setItems( interfaceData );
interfaceTableView.getColumns().setAll( ifIndexCol, ifDescrCol );
rootNode.add( interfaceTableView, 0, 7, 2, 1 );

......但这不起作用。

我有一个循环来验证数据是否可用于该方法,第二个验证数据是否已从文件中正确读入。两个容器似乎都有有效数据,但都没有进入我的表格。

我的表似乎与教程表有效,但很明显我在某个地方犯了错误。有谁看到我的错误在哪里?

1 个答案:

答案 0 :(得分:3)

用于输入PropertyValueFactory的SNMPInterface类的getter和setter应该标记为public,而不是no modifier(否则PropertyValueFactory中固有的反射逻辑将找不到它们)。< / p>

public static class SNMPInterface {
    private final SimpleStringProperty ifIndex;
    private final SimpleStringProperty ifDescr;

    SNMPInterface( String ifIndex, String ifDescr ) {
        this.ifIndex = new SimpleStringProperty( ifIndex );
        this.ifDescr = new SimpleStringProperty( ifDescr );
    }

    public String getIfIndex() {
        return ifIndex.get();
    }

    public void setIfIndex( String index ) {
        ifIndex.set( index );
    }

    public String getIfDescr() {
        return ifDescr.get();
    }

    public void setIfDescr( String descr ) {
        ifDescr.set( descr );
    }
}