java - 在javaFX中调整 TableView 中的列大小时如何获取列宽和名称

标签 java javafx tableview tablecolumn

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

  • 简化处理多列宽度的任务。 您可以执行以下操作

    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);
    
  • 创建一个公共(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/

    相关文章:

    java - 检测 JavaFX webview 中的 URL 更改

    ios - swift 2.2中api(json)没有数据时如何显示警报

    ios - 在 UITableView 滑动中添加额外的按钮

    iPhone - 内部有 TextView 和表格 View 的 ScrollView

    java - 计算步数和 O 表示法

    java - 将优先级队列读/写到文本文件的有效方法是什么?

    Java持久化: @ManyToMany Project to List<Projects>

    java - 正则表达式和 AwkFilenameFilter

    java - 如何将值绑定(bind)到计算结果?

    JavaFX 按钮不可点击