Java 调整列宽以动态适应JTable的内容,使其';它在JScrollPane中

Java 调整列宽以动态适应JTable的内容,使其';它在JScrollPane中,java,swing,Java,Swing,我目前正在使用这个(取自)来调整列宽,这是可行的,表格单元格不可编辑,内容是使用DefaultTableModel动态添加的,但是如果行宽大于表格,它不会使用滚动面板 这是我的表格定义 JScrollPane jScrollPane1 = new JScrollPane(); JTable jTable = new JTable(); jTable.setModel(new DefaultTableModel( new Object [][] { }, n

我目前正在使用这个(取自)来调整列宽,这是可行的,表格单元格不可编辑,内容是使用DefaultTableModel动态添加的,但是如果行宽大于表格,它不会使用滚动面板

这是我的表格定义

JScrollPane jScrollPane1 = new JScrollPane();
JTable jTable = new JTable();

jTable.setModel(new DefaultTableModel(
   new Object [][] {
   },
         
   new String [] {
      "COLUMN1", "COLUMN2"
   }) {
      Class[] types = new Class [] {
         String.class, String.class
      };

      boolean[] canEdit = new boolean [] {
         false, false
      };

      public Class getColumnClass(int columnIndex) {
         return types [columnIndex];
      }

      public boolean isCellEditable(int rowIndex, int columnIndex) {
         return canEdit [columnIndex];
      }
});

TableColumnAdjuster tblAdjuster = new TableColumnAdjuster(jTable);
tblAdjuster.setDynamicAdjustment(true);

jScrollPane1.setViewportView(jTable);

他们有什么建议吗?

我已经按照我使用的代码的开发人员定义的规则解决了这个问题:

请注意,此类设计用于使用 自动调整大小模式的自动调整大小关闭。与所有其他模式,你是 约束,因为列的宽度必须适合表格内部。所以 如果增加一列的宽度,则一个或多个列的宽度 其他列必须减少。因此,的调整大小模式 调整所有列的大小将最有效

因此,在创建TableColumnAdjulator实例之前,我必须将AutoResizeMode设置为OFF:

jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

使用TableColumnRegulator所需的3行代码中,您只使用了其中的2行。我省略了哪一行?链接中的示例代码使用了什么?抱歉,我不明白您在问什么。原始问题中的第二个链接会将您带到博客条目。在博客中有3行代码演示了类的基本用法。您发布的代码不使用这三行代码。JTable的默认行为是在可用空间中容纳所有列,因此您永远不会看到滚动窗格的scollbar。博客展示了如何改变这种行为。因此,我的建议是复制博客示例中的所有3行代码。这正是博客条目所做的。我上面的评论是为了确保你关注博客上的信息。这是一个不应该在论坛上发布的问题。人们花时间阅读这篇文章,即使解决问题所需的所有信息都已在博客链接中提供给你。不要忽略示例中给出的代码,除非您明确知道为什么不需要这些代码。