【发布时间】:2022-01-07 12:51:42
【问题描述】:
Java 记录是 Java15 的一项新功能。假设您有这样的记录。
public record Person(String last, String first, int age)
{
public Person()
{
this("", "", 0);
}
}
这是最后一堂课。它会自动生成 getter 方法 first()、last() 和 age()。
现在这里是 JavaFX 中的 TableView。
/**************************************************
* Author: Morrison
* Date: 10 Nov 202021
**************************************************/
import javafx.application.Application;
import javafx.application.Platform;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.control.TableView;
import javafx.scene.control.TableColumn;
import javafx.scene.control.cell.PropertyValueFactory;
public class TV extends Application
{
public TV()
{
}
@Override
public void init()
{
}
@Override
public void start(Stage primary)
{
BorderPane root = new BorderPane();
TableView<Person> table = new TableView<>();
root.setCenter(table);
TableColumn<Person, String> lastColumn = new TableColumn<>("Last");
lastColumn.setCellValueFactory(new PropertyValueFactory<Person,
String>("last"));
TableColumn<Person, String> firstColumn = new TableColumn<>("First");
firstColumn.setCellValueFactory(new PropertyValueFactory<Person,
String>("first"));
TableColumn<Person, Integer> ageColumn = new TableColumn<>("Age");
ageColumn.setCellValueFactory(new PropertyValueFactory<Person,
Integer>("age"));
table.getColumns().add(lastColumn);
table.getColumns().add(firstColumn);
table.getColumns().add(ageColumn);
table.getItems().add(new Person("Smith", "Justin", 41));
table.getItems().add(new Person("Smith", "Sheila", 42));
table.getItems().add(new Person("Morrison", "Paul", 58));
table.getItems().add(new Person("Tyx", "Kylee", 40));
table.getItems().add(new Person("Lincoln", "Abraham", 200));
Scene s = new Scene(root, 500, 500);
primary.setTitle("TableView Demo");
primary.setScene(s);
primary.show();
}
@Override
public void stop()
{
}
}
问题就在这里。
TableColumn<Person, String> lastColumn = new TableColumn<>("Last");
lastColumn.setCellValueFactory(new PropertyValueFactory<Person,
String>("last"));
TableView 期望名称为 getFirst、getLast 和 getAge 的方法来完成其工作。除了做这种可怕的事情之外,还有其他解决方法吗?
public record Person(String last, String first, int age)
{
public Person()
{
this("", "", 0);
}
public String getLast()
{
return last;
}
public String getFirst()
{
return first;
}
public int getAge()
{
return age;
}
}
【问题讨论】:
-
这是基本功能;检查使用 Java 8 或更高版本编写的
TableView上的任何合理教程。只需为每一列实现cellValueFactory。
标签: javafx tableview java-record