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

时间:2017-09-16 15:27:43

标签: java javafx tableview tablecolumn

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

};

1 个答案:

答案 0 :(得分:1)

1.创建一个默认值为false

的布尔变量
boolean isUIUpdatedByUser = false;

2.在你的

tcName.widthProperty().addListener(new ChangeListener<Number>() {
      isUIUpdatedByUser = true; // just set it to true
  });
  1. 现在处理close事件。有很多方法可以处理场景关闭事件。 a)给你的AnchorPane提供一个Id并获得像

    这样的近似事件

    ap.getScene()。getWindow()。setOnCloseRequest(event - &gt; {     });

    b)你添加舞台的地方

    primaryStage.setOnCloseRequest(event - &gt; {

    });
    

    c)见answer

  2. 现在处于关闭事件中。

    {  //保存您的ui更改  saveColumnWidth( “tcCode /代码”,150); }

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

    1. 创建一个匿名类
    2. //创建一个监听器

      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. 创建一个通用函数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);
                }
            });
        }
        
      2. 用户喜欢

        changelistener(column1);
                changelistener(column2);
                changelistener(column3);