在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
  });
  1. 现在处理关闭事件。有很多方法可以处理场景关闭 event.e.g。 a) 给你的 AnchorPane 一个 Id 并获得像

    这样的关闭事件

    ap.getScene().getWindow().setOnCloseRequest(事件 -> { });

    b) 添加舞台的位置

    primaryStage.setOnCloseRequest(事件 -> {

    });
    

    c) 看这个 answer

  2. 现在进入您的结束活动。

    { //保存你的 ui 更改 saveColumnWidth("tcCode/Code",150); }

减轻处理多列宽度的任务。 您可以执行以下操作

  1. 创建匿名 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);
  1. 创建一个常用函数添加调用

    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);