Java 在表中显示属性
我必须在javafx中填充一个2列表,我想知道最好的方法是什么 基本上我有这门课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
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());