【问题标题】:Javafx TableView is always empty [duplicate]Javafx TableView始终为空[重复]
【发布时间】:2018-09-19 01:33:02
【问题描述】:

我一直在尝试在 javafx 中创建一个 tableview。出于某种原因,tableview 有正确的列,但没有填充任何数据。 这是我到目前为止所尝试的。 我还尝试过 Eclipse 和 Intellij 上的代码,所以我认为我的编译器或环境没有任何问题。 我在这里先向您的帮助表示感谢。 :)

import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.*;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.collections.*;


    public  class MainScreen extends Application{
            private TableView<Item> table = new TableView<Item>();
            private final ObservableList<Item> data =
                    FXCollections.observableArrayList(new Item("AZZZZ", "3"),new Item("ASD","33"));
            public static void main(String args[]) {
                launch(args);
            }

        public void start(Stage stage) {
            stage.setTitle("Inventory Management");
            FlowPane root = new FlowPane();


            table.setEditable(true);

            TableColumn<Item,String> nameCol = new TableColumn<>("Name");

            TableColumn<Item,String> qtyCol = new TableColumn<>("Quantity");
            nameCol.setMinWidth(100);
            nameCol.setCellValueFactory(
                    new PropertyValueFactory<>("name"));
            qtyCol.setMinWidth(100);
            qtyCol.setCellValueFactory(
                    new PropertyValueFactory<>("number"));


            //data.add(new Item("ZZZ","5"));
            table.setItems(data);
            table.getColumns().addAll(nameCol,qtyCol);

            root.getChildren().addAll(table);
            stage.setScene(new Scene(root,300,300));
            stage.show();
        }

        public static class Item{
            String name;
            String number;

            Item(String n,String num){
                name=n;
                number=num;
            }
        }
    }
}

【问题讨论】:

  • 您需要 public 获取 Item 类中的字段,因为 PropertyValueFactory 依赖它们来检索列的项目。
  • @fabian 应该有一个 my-data-not-showing-in-the-table 的自动关闭功能;)在 OP:请搜索这个站点,有无数个完全相同的问题大约有几个可能的原因。

标签: java javafx tableview


【解决方案1】:

您需要通过 getter/setter 和属性公开您的数据,请参阅https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/TableView.html

public static class Item {

    private final StringProperty nameProp = new SimpleStringProperty();
    private final StringProperty numberProp = new SimpleStringProperty();

    Item(String n, String num) {
        nameProp.set(n);
        numberProp.set(num);
    }

    public String getName() {
        return nameProp.get();
    }

    public void setName(String name) {
        nameProp.set(name);
    }

    public StringProperty nameProperty() {
        return nameProp;
    }

    public String getNumber() {
        return numberProp.get();
    }

    public void setNumber(String number) {
        numberProp.set(number);
    }

    public StringProperty numberProperty() {
        return numberProp;
    }
}

【讨论】:

  • 在此示例中,属性不是必需的,因为如果没有找到所需的属性,PropertyValueFactory 可以使用 getter。
猜你喜欢
  • 2016-06-01
  • 2012-10-09
  • 2017-09-12
  • 2015-07-24
  • 2019-07-28
  • 1970-01-01
  • 2018-12-24
  • 2015-08-26
  • 1970-01-01
相关资源
最近更新 更多