当前位置: 首页 > 知识库问答 >
问题:

使用JavaFX-8在TableView中自动调整TableCol

罗智刚
2023-03-14

当我在JavaFX中生成一个表时,列太大了,我想在它出现在我的应用程序上时调整它们的大小,以减少它们。我在stackOverflow上阅读了那些有用的文章,但它们对我没有帮助:表视图中的javafx列自动调整大小;JavaFX TableCol的列调整大小以适应单元格内容。事实上,与主题不同,我的列中有列,但它不起作用。对于信息,这些列的反应相同,如果我们双击它们,它们会自动调整大小。我试图复制这样的解决方案:

    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 at sun . reflect . nativemethodaccessorimpl . invoke 0(本机方法)at sun . reflect . nativemethodaccessorimpl . invoke(nativemethodaccessorimpl . Java:62)at sun . reflect . delegatingmethodaccessorimpl . invoke(delegatingmethodaccessorimpl . Java:43)at Java . lang . reflect . Method . invoke(Method . Java:498)at my package .GUIUtils $ 1 . onchanged(GUIUtils . Java:37)。。。导致原因:Java . lang . nullpointerexception at com . sun . Java FX . scene . control . skin . tableviewskin . resize columntofitcontent(tableviewskin . Java:257)...80多个

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

共有1个答案

白禄
2023-03-14

对于那些感兴趣的人来说,我的解决方案是可行的,但是我的一些列是不可见的,这就是为什么我有我的例外。只要放上if(col.isVisible())就可以了!

 类似资料:
  • 我有一个表,它只包含列ID和name。但是,这个表被嵌入到一个SplitPane中,让用户有机会轻松快速地更改大小。我希望桌子总是在整个宽度内填满。ID列的大小设置为70,并且只有Name列应该始终传播到表的剩余宽度。我使用FXML创建布局。有没有可能直接在FXML中设置这个?

  • 我有一个TableView,在这个TableView中,有5列。其中一列只包含TableView中的行数,它只是对它们进行计数。以下行为是我想要实现的: 数字列应具有与其内容相适应的宽度 数字列不可缩放 其他列应可调整大小 当内容太长时,其他列可以并且应该截断它们的内容,以便它们适合TableView的区域,并且不可见水平滚动条 我有5个TableView列,我是这样创建的: 所以我的问题是:如何

  • 我是JavaFX的新手,目前我试图构建一个小型聊天窗口。为此,我为我的Listview获得了以下自定义单元格布局。 网格 我使用外部HBox,所以我可以像whatsapp一样对齐消息。。。(左右对齐)。在我的GridPane中,我得到了两列,消息(标签)在左侧,其他一些随机的东西在右侧(时间戳,一些小图标)。现在我需要的是:GridPane/左列/标签的高度应该根据文本消息的长度动态地增长/收缩。

  • iOS 8为tableViews引入了一种基于内容自动调整单元格高度的方式(通过AutoLayout)。 我已经开始处理标签、图像等了。 但是,我想不出一种方法,让表格视图单元格在单元格的文本视图发生变化时自动增长? 关于设置的更多信息:单元格内的UITextView对表视图单元格的contentView有水平和垂直约束。我还禁用了文本视图的滚动。 我还尝试手动更改单元格的高度约束,但单元格也不会

  • 我在禁用TableView中的行时遇到问题。我有一个包含三列的TableView。名称列、值列和复选框列。如果用户选中复选框,则应使用与选中行中的值相同的值禁用所有行。我尝试使用ReactFX2框架在禁用的属性和单元格之间创建绑定,但没有成功。有没有一个简单的方法来处理我的问题。这是我的代码: trafficvolume.class controller.class 我想禁用所有与所选行具有相同f

  • 问题内容: 我是JavaFX8的新手,我正在尝试使用initialize方法在控制器中向TableView提供一些数据。我看到了很多关于它的话题,尝试了很多东西,但是对我来说不起作用。 还有很多,但是没有一种解决方案对我有用。 这是我的代码: class Employee class Person 这是定义用户界面的FXML: ConsultHR.fxml 最后是控制器:类ConsultHRCon