2017-09-16 78 views
1

我需要在用户设置文件中保存列宽,我在云中加载Ta​​bleView时使用的用户先前为了更好的用户经验。如何在javaFX的表格视图中调整列大小时获取列宽和名称

在我的研究中有width属性上变化的听众

tcName.widthProperty().addListener(new ChangeListener<Number>() {}); 

其中“tcName”是列对象。

这是在改变列宽时在原始中发射多次。

是否有任何事件被称为改变? 或者

任何possiblility获得输出像下面

@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

1,创建与假

boolean isUIUpdatedByUser = false; 

默认值的布尔变量2.in您

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

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

    b)当你把你的舞台

    primaryStage.setOnCloseRequest(事件 - 在你关闭事件> {

    }); 
    

    C)看到这个answer

  2. 现在。

    { //保存你的用户界面修改 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); 
  • 创建通讯在函数中添加调用它

    公共无效的ChangeListener(最终的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); 
    
    +0

    感谢bro格栅片断,是否有任何方法来听TableView而不是列。 (当然是,我需要知道该列是否调整大小) – Labeeb

    +0

    @Labeeb我已更新我的答案,以帮助您轻松进行多列宽度更改处理。如果这个答案符合你的需要。请接受答案:) –