在javaFX中调整表视图中的列大小时如何获取列宽和名称
How to get column width and name when resized a column in a tableview in javaFX
我需要在用户设置文件中保存列宽,我云加载 TableView 时每列的宽度都与用户之前提供的相同,以获得更好的用户体验。
在我的研究中有一个关于宽度变化的监听器 属性
tcName.widthProperty().addListener(new ChangeListener<Number>() {});
其中 "tcName" 是列对象。
这会在更改列宽时以原始格式触发多次。
是否有任何事件称为已更改?
或者
任何获得如下输出的可能性
@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.Create 布尔变量,默认值为 false
boolean isUIUpdatedByUser = false;
2.in 你的
tcName.widthProperty().addListener(new ChangeListener<Number>() {
isUIUpdatedByUser = true; // just set it to true
});
现在处理关闭事件。有很多方法可以处理场景关闭 event.e.g。
a) 给你的 AnchorPane 一个 Id 并获得像
这样的关闭事件
ap.getScene().getWindow().setOnCloseRequest(事件 -> {
});
b) 添加舞台的位置
primaryStage.setOnCloseRequest(事件 -> {
});
c) 看这个 answer
现在进入您的结束活动。
{
//保存你的 ui 更改
saveColumnWidth("tcCode/Code",150);
}
减轻处理多列宽度的任务。
您可以执行以下操作
- 创建匿名 class
// 创建监听器
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 void changelistener(final TableColumn listerColumn) {
listerColumn.widthProperty().addListener(新的 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);
我需要在用户设置文件中保存列宽,我云加载 TableView 时每列的宽度都与用户之前提供的相同,以获得更好的用户体验。
在我的研究中有一个关于宽度变化的监听器 属性
tcName.widthProperty().addListener(new ChangeListener<Number>() {});
其中 "tcName" 是列对象。
这会在更改列宽时以原始格式触发多次。
是否有任何事件称为已更改? 或者
任何获得如下输出的可能性
@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.Create 布尔变量,默认值为 false
boolean isUIUpdatedByUser = false;
2.in 你的
tcName.widthProperty().addListener(new ChangeListener<Number>() {
isUIUpdatedByUser = true; // just set it to true
});
现在处理关闭事件。有很多方法可以处理场景关闭 event.e.g。 a) 给你的 AnchorPane 一个 Id 并获得像
这样的关闭事件ap.getScene().getWindow().setOnCloseRequest(事件 -> { });
b) 添加舞台的位置
primaryStage.setOnCloseRequest(事件 -> {
});
c) 看这个 answer
现在进入您的结束活动。
{ //保存你的 ui 更改 saveColumnWidth("tcCode/Code",150); }
减轻处理多列宽度的任务。 您可以执行以下操作
- 创建匿名 class
// 创建监听器
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 void changelistener(final TableColumn listerColumn) { listerColumn.widthProperty().addListener(新的 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);