Java 在表中显示属性

Java 在表中显示属性,java,javafx,properties,tableview,Java,Javafx,Properties,Tableview,我必须在javafx中填充一个2列表,我想知道最好的方法是什么 基本上我有这门课 public class Name { private String _name; private Rating _rating; public Name(String name , Rating rating) { _name = name; _rating = Rating.NO_RATING; } public String get

我必须在javafx中填充一个2列表,我想知道最好的方法是什么

基本上我有这门课

public class Name {

    private String _name;
    private Rating _rating;

    public Name(String name , Rating rating) {
        _name = name;
        _rating = Rating.NO_RATING;
    }

    public String getName() {
        return _name;
    }

    public Rating getRating() {
        return _rating;
    }
}

我想在javafx中填充一个表,使其中一列具有名称,另一列具有评级。我尝试过通过name类填充,并使用getName()getRating()方法,但不起作用。我在网上搜索了一个名为“属性”的东西,但在这种情况下,由于我没有任何属性,如何使用属性?

在数据模型中,使用属性扭曲要在表中显示的属性:

//data model 
public class Name {

    private SimpleStringProperty name;
    private SimpleIntegerProperty rating;

    public Name(String name , int rating) {
        this.name = new SimpleStringProperty(name);
        this.rating = new SimpleIntegerProperty(rating);
    }

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

    public int getRating() {
        return rating.get();
    }
}
并在表列中使用这些属性

import javafx.application.Application;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;

public class TableViewDemo extends Application {

    private final ObservableList<Name> data =
            FXCollections.observableArrayList(
                    new Name("Jacob", 12),
                    new Name("Isabella", 14),
                    new Name("Ethan", 5),
                    new Name("Emma", 17),
                    new Name("Michael",9));

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) {

        stage.setTitle("Table View Sample");

        TableColumn<Name, String> nameCol = new TableColumn<>("Name");
        nameCol.setMinWidth(100);
        nameCol.setCellValueFactory(new PropertyValueFactory<>("name"));

        TableColumn<Name, Integer> ratingCol =  new TableColumn<>("Rating");
        ratingCol.setMinWidth(100);
        ratingCol.setCellValueFactory(new PropertyValueFactory<Name, Integer>("rating"));
        final TableView<Name> table = new TableView<>();
        table.setItems(data);
        table.getColumns().addAll(nameCol, ratingCol);

        Scene scene = new Scene(table);
        stage.setScene(scene);
        stage.show();
    }
}
并通过以下方式定义列:

    TableColumn<Name, String> nameCol = new TableColumn<>("Name");
    nameCol.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
    nameCol.setMinWidth(100);

    TableColumn<Name, String> ratingCol =   new TableColumn<>("Rating");
    ratingCol.setCellValueFactory(cellData -> cellData.getValue().ratingProperty().asString()); 
TableColumn Name col=新的TableColumn(“名称”);
nameCol.setCellValueFactory(cellData->cellData.getValue().nameProperty());
名称列设置最小宽度(100);
TableColumn ratingCol=新的TableColumn(“评级”);
ratingCol.setCellValueFactory(cellData->cellData.getValue().ratingProperty().AssString());

请格式化您的代码。“但那不起作用”-展示你做了什么。你的字段似乎是不变的;我建议在这种情况下添加
final
关键字。不过,我不确定为什么不在
\u rating
字段中使用构造函数参数。如果您对项目的不变性感到满意,只需在列中使用
新属性值工厂(“名称”)
新属性值工厂(“评级”)
作为
cellValueFactory
即可。如果不使用内部属性,则无需使用内部属性,这是作为属性公开的,以允许摆脱易出错的PropertyValueFactory;)
    TableColumn<Name, String> nameCol = new TableColumn<>("Name");
    nameCol.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
    nameCol.setMinWidth(100);

    TableColumn<Name, String> ratingCol =   new TableColumn<>("Rating");
    ratingCol.setCellValueFactory(cellData -> cellData.getValue().ratingProperty().asString());