【问题标题】:How to get column width and name when resized a column in a tableview in javaFXjavaFX中的tableview中调整列大小时如何获取列宽和名称
【发布时间】:2018-02-25 14:02:00
【问题描述】:

我需要在用户设置文件中保存列宽,我会在云加载 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);

};

【问题讨论】:

    标签: java javafx tableview tablecolumn


    【解决方案1】:

    1.创建一个默认值为false的布尔变量

    boolean isUIUpdatedByUser = false;
    

    2.在你的

    tcName.widthProperty().addListener(new ChangeListener<Number>() {
          isUIUpdatedByUser = true; // just set it to true
      });
    
    1. 现在处理关闭事件。有多种方法可以处理场景关闭事件。例如 a) 为您的 AnchorPane 提供一个 ID 并获得类似的关闭事件

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

      b) 添加舞台的位置

      primaryStage.setOnCloseRequest(事件 -> {

      });
      

      c) 看到这个answer

    2. 现在在您的关闭活动中。

      { //保存你的用户界面更改 saveColumnWidth("tcCode/代码",150); }

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

    1. 创建一个匿名类

    // 创建监听器

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

    【讨论】:

    • 感谢兄弟的炉排sn-p,有没有办法听TableView而不是列。 (是的,当然,我需要知道列是否已调整大小)
    • @Labeeb 我已经更新了我的答案,以帮助您轻松处理多个列宽更改。如果这个答案符合您的需要。请接受答案:)
    猜你喜欢
    • 2014-10-31
    • 2013-01-17
    • 2013-10-25
    • 2015-11-23
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2021-12-04
    相关资源
    最近更新 更多