首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用TableColumn -8自动调整TableView中TableColumn的大小

用TableColumn -8自动调整TableView中TableColumn的大小
EN

Stack Overflow用户
提问于 2020-01-21 16:30:20
回答 1查看 258关注 0票数 0

当我在JavaFX中生成一个表时,列太大了,当它出现在我的应用程序中时,我想调整它们的大小,以减少它们。我在stackOverflow上读了一些有用的文章,但它们并没有帮助我:javafx column in tableview auto fit sizeJavaFX TableColumn resize to fit cell content。事实上,与主题不同的是,我的专栏中有列,但它不起作用。对于信息,这些列的反应是一样的,如果我们双击它们,它们就会自动调整大小。我试着复制这样的解决方案:

代码语言:javascript
复制
    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();
                            }
                        }           
                  }         
           });  
       } 
}

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

sun.reflect.NativeMethodAccessorImpl.invoke0(Native方法的

java.lang.reflect.InvocationTargetException )在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)的java.lang.reflect.InvocationTargetException,myPackage.GUIUtils$1.onChanged(GUIUtils.java:37)的java.lang.reflect.Method.invoke(Method.java:498)。。。原因: com.sun.javafx.scene.control.skin.TableViewSkin.resizeColumnToFitContent(TableViewSkin.java:257)的java.lang.NullPointerException . 80多人

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-22 09:06:14

对于那些感兴趣的人来说,我的解决方案是有效的,但是我的一些专栏是看不见的,这就是为什么我有我的异常。只需放置if(col.isVisible())就可以了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59845432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档