【问题标题】:automatically resize TableColumn of TableColumn in TableView with JavaFX -8使用 JavaFX -8 自动调整 TableView 中 TableColumn 的 TableColumn 大小
【发布时间】:2020-05-07 18:28:31
【问题描述】:

当我在 JavaFX 中生成表格时,列太大,我想在它出现在我的应用程序时调整它们的大小以减少它们。 我在 stackOverflow 上阅读了那些很有用但对我没有帮助的文章:javafx column in tableview auto fit sizeJavaFX TableColumn resize to fit cell content。 确实,与主题不同,我的专栏中有专栏,但它不起作用。 有关信息,这些列的反应方式相同,如果我们双击它们,它们会自动调整大小。 我试图重现这些解决方案:

    import java.lang.reflect.InvocationTargetException; 
    import java.lang.reflect.Method; import java.util.List; 
    import java.util.stream.Collectors;   
    import com.sun.javafx.scene.control.skin.TableViewSkin;
    import javafx.collections.ListChangeListener; 
    import javafx.collections.ObservableList; 
    import javafx.scene.control.TableColumn; 
    import javafx.scene.control.TableView;

public class GUIUtils {     
       private static Method columnToFitMethod;

       static {         
            try {           
               columnToFitMethod = TableViewSkin.class.getDeclaredMethod("resizeColumnToFitContent",TableColumn.class,int.class);
            columnToFitMethod.setAccessible(true);      
            } catch (NoSuchMethodException e) {             
                e.printStackTrace();        
            }   
        }

       public static <S> void autoFitTable(TableView<S> tableView) {         
            tableView.getItems().addListener(new ListChangeListener<Object>() {
                  @Override             
                  public void onChanged(Change<?> c) {
                        for (TableColumn column : tableView.getColumns()) {
                            try {
                                List<TableColumn<S, ?>> columns = (List<TableColumn<S, ?>>) column.getColumns.stream().collect(Collectors.toList());
                                for (TableColumn col : columns) {
                                    columnToFitMethod.invoke(tableView.getSkin(), col, -1);
                                }
                                columnToFitMethod.invoke(tableView.getSkin(), column, -1);
                            } catch (IllegalAccessException | InvocationTargetException e) {
                                e.printStackTrace();
                            }
                        }           
                  }         
           });  
       } 
}

在我对子列的第二次迭代中,我有:

java.lang.reflect.InvocationTargetException 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 myPackage.GUIUtils$1.onChanged(GUIUtils.java:37) . . . 引起:java.lang.NullPointerException at com.sun.javafx.scene.control.skin.TableViewSkin.resizeColumnToFitContent(TableViewSkin.java:257) ... 80 更多

你知道我能做什么吗? 谢谢你的帮助

【问题讨论】:

    标签: java resize tableview javafx-8 tablecolumn


    【解决方案1】:

    对于那些感兴趣的人,我的解决方案有效,但我的某些专栏不可见,这就是我有例外的原因。 只需输入 if(col.isVisible()) 就可以了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-11
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 2019-02-24
      • 2016-10-27
      相关资源
      最近更新 更多