【问题标题】:Javafx - I cannot get data into a TableViewJavafx - 我无法将数据放入 TableView
【发布时间】:2016-09-06 01:10:36
【问题描述】:

我无法用我自己的数据填充 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" )
        );

稍后,我为“ifIndex”数据成员创建一个列:

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

...以及“ifDescr”的第二列:

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

...但这不起作用。

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

我的表似乎与教程表实际上相同,但显然我在某处犯了错误。有谁知道我的错误在哪里?

【问题讨论】:

  • 你试过没有菱形构造函数的代码吗?
  • 是的。它会导致“未经检查的调用”或“未经检查的分配”,具体取决于我移除的钻石。我没有发现任何钻石组合有效。
  • SNMPInterface 是否有公共方法 ifIndexProperty()ifDescrProperty()
  • 不,大卫。我只创建了 getter 和 setter 以及 toString() 的覆盖。但是,本教程没有类似的方法,它对我有用。

标签: java javafx tableview


【解决方案1】:

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

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

【讨论】:

  • 就是这样!非常感谢。
猜你喜欢
  • 2013-01-29
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 2016-11-20
  • 1970-01-01
  • 2017-02-04
  • 2013-01-17
相关资源
最近更新 更多