javaFX中的TableView相关知识点笔记
VBox.setSpacing(5);
面板的模块之间间隔为5
vbox.setPadding(new Insets(10, 0, 0, 10));
1.padding在CSS中是用来控制元素内边距的。
2.padding如果写1个值,则上下左右4个内边距都是此值
3.padding如果写2个值,则是上下、左右值。
4.padding如果写4个值,则是上、右、下、左值。
5.Insets设置节点外围空白大小
TableView class表单类,管理整个表单(包括TableColumn class和TableCell class)。列表中无数据时,可用setPlaceholder方法来指定在表中要显示的node(节点),默认显示“No content in table”。
TableColumn class表单列表类,管理表单中每一列的列名、内容等。
setVisible()方法,设置列的可见性。
getColumns().addAll()设置嵌套列
第一步:定义数据模型 新建一个类,类中数据域对应TableView中的每一列,例子如下:
private final SimpleStringProperty firstName;
private final SimpleStringProperty lastName;
private final SimpleStringProperty email;
SimpleStringProperty可以使得TableView实时更新。
TableCell setCellValueFactory方法为每个列指定单元格工厂,单元格工厂通过PropertyValueFactory class实现,该类使用表列的属性值(与新建立的保存数据的类类名相同)作为该类(此处以Person类为例)相应方法的引用,例子如下:
firstNameCol.setCellValueFactory(
new PropertyValueFactory<>("firstName")
);
lastNameCol.setCellValueFactory(
new PropertyValueFactory<>("lastName")
);
emailCol.setCellValueFactory(
new PropertyValueFactory<>("email")
);
第二步:向数据模型中添加数据 FXCollections包装器方法(如synchronizeObservableList或emptyObservableList)与Collections中的方法具有完全相同的功能,除非它们返回ObservableList,因此适用于需要在输入上使用ObservableList的方法。
ObservableList对象允许跟踪对其元素的任何更改,所以每当数据更改时,TableView内容都会自动更新。
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")
);
第三步:将数据与列关联 可以使用TableView类的setItems方法将数据添加到表中
table.setItems(data);
table.getColumns().addAll(firstNameCol, lastNameCol, emailCol);
完整的TableView使用的代码(基础操作)
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.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class TableViewSample extends Application {
private final TableView<Person> table = new TableView<>();
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<>("firstName"));
TableColumn lastNameCol = new TableColumn("Last Name");
lastNameCol.setMinWidth(100);
lastNameCol.setCellValueFactory(
new PropertyValueFactory<>("lastName"));
TableColumn emailCol = new TableColumn("Email");
emailCol.setMinWidth(200);
emailCol.setCellValueFactory(
new PropertyValueFactory<>("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);
}
}
}