javafx TableView中的TableColumn如何填充的自帶類,以及編輯單元格
阿新 • • 發佈:2019-01-11
在javafx中TableView中有TableColumn,即每一列,對於每一列中每個單元怎麼填充,javafx的官方文件提供了兩個實現類
[java] view plain copy- public class MapValueFactory<T>
- extends java.lang.Object
- implements Callback<TableColumn.CellDataFeatures<java.util.Map,T>,ObservableValue<T>>
和 [java] view plain copy
- public
- extends java.lang.Object
- implements Callback<TableColumn.CellDataFeatures<S,T>,ObservableValue<T>>
以下是兩個簡單的例子: [java] view plain
- 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;
- }
- }
和 [java] view plain copy
- 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", "[email protected]"),
- new Person("Isabella", "Johnson", "[email protected]"),
- new Person("Ethan", "Williams", "[email protected]"),
- new Person("Emma", "Jones", "[email protected]"),
- new Person("Michael", "Brown", "[email protected]")
- );
- 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);