我需要在用户设置文件中保存列宽,我将云加载TableView,其宽度与之前用户提供的每列相同,以获得更好的用户体验。
在我的研究中,有一个关于宽度属性变化的倾听者
tcName.widthProperty().addListener(new ChangeListener<Number>() {});
其中&#34; tcName&#34;是列对象。
这会在改变列宽的同时以原始方式触发几次。
是否有任何名为更改的事件? 或
任何获得输出的可能性
@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);
};
答案 0 :(得分:1)
1.创建一个默认值为false
的布尔变量boolean isUIUpdatedByUser = false;
2.在你的
tcName.widthProperty().addListener(new ChangeListener<Number>() {
isUIUpdatedByUser = true; // just set it to true
});
现在处理close事件。有很多方法可以处理场景关闭事件。 a)给你的AnchorPane提供一个Id并获得像
这样的近似事件ap.getScene()。getWindow()。setOnCloseRequest(event - &gt; { });
b)你添加舞台的地方
primaryStage.setOnCloseRequest(event - &gt; {
});
c)见answer
现在处于关闭事件中。
{ //保存您的ui更改 saveColumnWidth( “tcCode /代码”,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);
创建一个通用函数add call it
public void changelistener(final 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);