在javafx中TableView中有TableColumn,即每一列,对于每一列中每个单元怎么填充,javafx的官方文档提供了两个实现类
- public class MapValueFactory<T>
- extends java.lang.Object
- implements Callback<TableColumn.CellDataFeatures<java.util.Map,T>,ObservableValue<T>>
和
- public class PropertyValueFactory<S,T>
- extends java.lang.Object
- implements Callback<TableColumn.CellDataFeatures<S,T>,ObservableValue<T>>
以下是两个简单的例子:
- import java.util.HashMap;
- import java.util.Map;
- import javafx.application.Application;
- import javafx.collections.FXCollections;
- import javafx.collections.ObservableList;
- import javafx.geometry.Insets;
- import javafx.scene.Group;
- import javafx.scene.Scene;
- import javafx.scene.control.Label;
- import javafx.scene.control.TableCell;
- import javafx.scene.control.TableColumn;
- import javafx.scene.control.TableView;
- import javafx.scene.control.cell.MapValueFactory;
- import javafx.scene.control.cell.TextFieldTableCell;
- import javafx.scene.layout.VBox;
- import javafx.scene.text.Font;
- import javafx.stage.Stage;
- import javafx.util.Callback;
- import javafx.util.StringConverter;
- public class TableViewSample5 extends Application {
- public static final String Column1MapKey = "A";
- public static final String Column2MapKey = "B";
- public static void main(String[] args) {
- launch(args);
- }
- @Override
- public void start(Stage stage) {
- Scene scene = new Scene(new Group());
- stage.setTitle("Table View Sample");
- stage.setWidth(300);
- stage.setHeight(500);
- final Label label = new Label("Student IDs");
- label.setFont(new Font("Arial", 20));
- TableColumn<Map, String> firstDataColumn = new TableColumn<>("Class A");
- TableColumn<Map, String> secondDataColumn = new TableColumn<>("Class B");
- firstDataColumn.setCellValueFactory(new MapValueFactory(Column1MapKey));
- firstDataColumn.setMinWidth(130);
- secondDataColumn.setCellValueFactory(new MapValueFactory(Column2MapKey));
- secondDataColumn.setMinWidth(130);
- TableView table_view = new TableView<>(generateDataInMap());
- table_view.setEditable(true);
- table_view.getSelectionModel().setCellSelectionEnabled(true);
- table_view.getColumns().setAll(firstDataColumn, secondDataColumn);
- final VBox vbox = new VBox();
- vbox.setSpacing(5);
- vbox.setPadding(new Insets(10, 0, 0, 10));
- vbox.getChildren().addAll(label, table_view);
- ((Group) scene.getRoot()).getChildren().addAll(vbox);
- stage.setScene(scene);
- stage.show();
- }
- private ObservableList<Map> generateDataInMap() {
- int max = 10;
- ObservableList<Map> allData = FXCollections.observableArrayList();
- for (int i = 1; i < max; i++) {
- Map<String, String> dataRow = new HashMap<>();
- String value1 = "A" + i;
- String value2 = "B" + i;
- dataRow.put(Column1MapKey, value1);
- dataRow.put(Column2MapKey, value2);
- allData.add(dataRow);
- }
- return allData;
- }
- }
和
- import javafx.application.Application;
- import javafx.beans.property.SimpleStringProperty;
- import javafx.collections.FXCollections;
- import javafx.collections.ObservableList;
- import javafx.geometry.Insets;
- import javafx.scene.Group;
- import javafx.scene.Scene;
- import javafx.scene.control.Label;
- import javafx.scene.control.TableColumn;
- import javafx.scene.control.TableView;
- import javafx.scene.control.TextField;
- import javafx.scene.control.cell.PropertyValueFactory;
- import javafx.scene.layout.VBox;
- import javafx.scene.text.Font;
- import javafx.stage.Stage;
- public class TableViewSample7 extends Application {
- private TableView<Person> table = new TableView<Person>();
- private final ObservableList<Person> data =
- FXCollections.observableArrayList(
- new Person("Jacob", "Smith", "jacob.smith@example.com"),
- new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
- new Person("Ethan", "Williams", "ethan.williams@example.com"),
- new Person("Emma", "Jones", "emma.jones@example.com"),
- new Person("Michael", "Brown", "michael.brown@example.com")
- );
- public static void main(String[] args) {
- launch(args);
- }
- @Override
- public void start(Stage stage) {
- Scene scene = new Scene(new Group());
- stage.setTitle("Table View Sample");
- stage.setWidth(450);
- stage.setHeight(500);
- final Label label = new Label("Address Book");
- label.setFont(new Font("Arial", 20));
- table.setEditable(true);
- TableColumn firstNameCol = new TableColumn("First Name");
- firstNameCol.setMinWidth(100);
- firstNameCol.setCellValueFactory(
- new PropertyValueFactory<Person, String>("firstName"));
- TableColumn lastNameCol = new TableColumn("Last Name");
- lastNameCol.setMinWidth(100);
- lastNameCol.setCellValueFactory(
- new PropertyValueFactory<Person, String>("lastName"));
- TableColumn emailCol = new TableColumn("Email");
- emailCol.setMinWidth(200);
- emailCol.setCellValueFactory(
- new PropertyValueFactory<Person, String>("email"));
- table.setItems(data);
- table.getColumns().addAll(firstNameCol, lastNameCol, emailCol);
- final VBox vbox = new VBox();
- vbox.setSpacing(5);
- vbox.setPadding(new Insets(10, 0, 0, 10));
- vbox.getChildren().addAll(label, table);
- ((Group) scene.getRoot()).getChildren().addAll(vbox);
- stage.setScene(scene);
- stage.show();
- }
- public static class Person {
- private final SimpleStringProperty firstName;
- private final SimpleStringProperty lastName;
- private final SimpleStringProperty email;
- private Person(String fName, String lName, String email) {
- this.firstName = new SimpleStringProperty(fName);
- this.lastName = new SimpleStringProperty(lName);
- this.email = new SimpleStringProperty(email);
- }
- public String getFirstName() {
- return firstName.get();
- }
- public void setFirstName(String fName) {
- firstName.set(fName);
- }
- public String getLastName() {
- return lastName.get();
- }
- public void setLastName(String fName) {
- lastName.set(fName);
- }
- public String getEmail() {
- return email.get();
- }
- public void setEmail(String fName) {
- email.set(fName);
- }
- }
- }