要保存Java TableView列宽的更改,可以使用以下方法:
saveColumnWidth()
方法中,监听每列的widthProperty()
属性变化事件。showAlert()
方法,用于显示保存列宽的弹窗。弹窗显示列名和新的列宽。下面是修改后的代码示例:
import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
public class Main extends Application {
private TableView tableView;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
tableView = new TableView<>();
TableColumn nameColumn = new TableColumn<>("姓名");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
nameColumn.setPrefWidth(100);
TableColumn ageColumn = new TableColumn<>("年龄");
ageColumn.setCellValueFactory(new PropertyValueFactory<>("age"));
ageColumn.setPrefWidth(100);
tableView.getColumns().addAll(nameColumn, ageColumn);
tableView.getItems().addAll(
new Person("张三", 25),
new Person("李四", 30),
new Person("王五", 35)
);
// 保存列宽变化
saveColumnWidth();
Scene scene = new Scene(tableView);
primaryStage.setScene(scene);
primaryStage.show();
}
private void saveColumnWidth() {
// 监听列宽变化事件
tableView.getColumns().forEach(column -> {
column.widthProperty().addListener((obs, oldWidth, newWidth) -> {
// 保存列宽到数据库或配置文件
// 这里仅显示一个弹窗来演示保存操作
String columnName = column.getText();
double width = newWidth.doubleValue();
showAlert(columnName, width);
});
});
}
private void showAlert(String columnName, double width) {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("保存列宽");
alert.setHeaderText(null);
alert.setContentText("列名:" + columnName + "\n" + "宽度:" + width);
alert.showAndWait();
}
public static class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
}
这样,当用户调整列宽时,将显示一个弹窗,其中包含列名和新的列宽。您可以根据需要将它们保存到数据库或配置文件中。