我需要将列宽保存在用户设置文件中,我云加载 TableView 时每列的宽度与用户之前指定的相同,以获得更好的用户体验。
在我的研究中,有一个关于宽度属性变化的监听器
tcName.widthProperty().addListener(new ChangeListener<Number>() {});
其中“tcName”是列对象。
在更改列宽时,会在原始状态下多次触发。
是否有名为“changed”的事件? 或者
有可能获得如下输出
@FXML
private TableView<ItemEmployee> tvData;
@FXML
private TableColumn<ItemEmployee, String> tcCode;
@FXML
private TableColumn<ItemEmployee, String> tcName;
@FXML
private TableColumn<ItemEmployee, String> tcCompany;
tcCode.setCellValueFactory(new PropertyValueFactory<>("Code"));
tcName.setCellValueFactory(new PropertyValueFactory<>("FullName"));
tcCompany.setCellValueFactory(new PropertyValueFactory<>("CompanyName"));
tvData.columnWidthChanged(){
system.out.println("width changed column name: tcCode/Code " );
system.out.println("width of column tcCode/Code : 150" );
saveColumnWidth("tcCode/Code",150);
};
最佳答案
1.创建一个 boolean 变量,默认值为 false
boolean isUIUpdatedByUser = false;
2.在你的
tcName.widthProperty().addListener(new ChangeListener<Number>() {
isUIUpdatedByUser = true; // just set it to true
});
现在处理关闭事件。有多种方法可以处理场景关闭事件。 a) 为您的 AnchorPane 提供一个 Id 并获取关闭事件,例如
ap.getScene().getWindow().setOnCloseRequest(事件 -> { });
b) 添加舞台的位置
primaryStage.setOnCloseRequest(事件 -> {
});
c) 看到这个 answer
现在是您的结束 Activity 。
{ //保存你的用户界面更改 saveColumnWidth("tcCode/Code",150); }
简化处理多列宽度的任务。 您可以执行以下操作
- 创建一个匿名类
//创建监听器
final ChangeListener<Number> listener = new ChangeListener<Number>()
{
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, final Number newValue)
{
//do your code here
}
};
并像这样使用它
column1.widthProperty().addListener(listener);
column2.widthProperty().addListener(listener);
创建一个公共(public)函数添加调用它
公共(public)无效changelistener(最终TableColumn listerColumn){ listerColumn.widthProperty().addListener(new ChangeListener() {
@Override public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) { System.out.print(listerColumn.getText() + " "); System.out.println(t1); } }); }
用户喜欢
changelistener(column1);
changelistener(column2);
changelistener(column3);
关于java - 在javaFX中调整 TableView 中的列大小时如何获取列宽和名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46255473/