Java JTable Swing:我无法通过在标题中拖动光标来调整列的大小

Java JTable Swing:我无法通过在标题中拖动光标来调整列的大小,java,swing,jtable,jtableheader,Java,Swing,Jtable,Jtableheader,我无法通过在标题列之间移动光标并拖动分隔符来调整列宽,尽管我已将setResizingAllowed()设置为true tbResumen = new JTable(); tbResumen.setEnabled(false); tbResumen.setRowHeight(20); tbResumen.setBackground(UIManager.getColor("Table.selectionBackground")); tbResumen.setBorder(new BevelBor

我无法通过在标题列之间移动光标并拖动分隔符来调整列宽,尽管我已将
setResizingAllowed()
设置为
true

tbResumen = new JTable();
tbResumen.setEnabled(false);

tbResumen.setRowHeight(20);
tbResumen.setBackground(UIManager.getColor("Table.selectionBackground"));
tbResumen.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
tbResumen.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
tbResumen.setFont(new Font("Arial", Font.PLAIN, 12));
tbResumen.setDefaultRenderer(Object.class, new RenderTablaInfo());
tbResumen.setOpaque(false);

tbResumen.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tbResumen.setColumnSelectionAllowed(false);
tbResumen.setRowSelectionAllowed(true);

tbResumen.setSize(new Dimension(840, 450));
tbResumen.setPreferredScrollableViewportSize(new Dimension(840, 450));

tbResumen.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

tbResumen.setModel(new DefaultTableModel(new Object[][] {{ label1, label2, label3, label4} },
new String[] { "foo", "bar", "foobar", "barfoo" }));

final JTableHeader headerResumen = new JTableHeader();
headerResumen.setReorderingAllowed(false); 
headerResumen.setResizingAllowed(true);
headerResumen.setColumnModel(tbResumen.getColumnModel());

headerResumen.setTable(tbResumen);
tbResumen.setTableHeader(headerResumen);

如果有人需要更多的代码来澄清这种情况,我会很快添加它们。谢谢

不清楚你的碎片哪里出错了。下面的最小竞争示例显示了一个表,其列可以调整大小,但不能重新排序。特别要注意的是,
tbResumen
显示在
JScrollPane


不清楚你的碎片哪里出了差错。下面的最小竞争示例显示了一个表,其列可以调整大小,但不能重新排序。特别要注意的是,
tbResumen
显示在
JScrollPane

  • 确保您的标题是要配置的标题
  • 因此,对于:

    JTableHeader headerResumen = tbResumen.getTableHeader();
    headerResumen.setResizingAllowed(true);
    
    我只是创建了另一个具有与我的表相同的
    模型的头,并在那里进行了配置,没有意识到我创建的新头不是我的表的头。我必须调用
    table.getTableHeader()
    来获取我想要的头,并且配置可以工作。为你的愚蠢道歉

  • 确保将光标悬停在此表中各列之间的边上时,已将光标设置为默认光标,以便您可以看到它变成一个双向箭头,并且您知道它们是可调整的

    tbResumen.setCursor(Cursor.getPredefinedCursor(Cursor_DEFAULT))

  • 如果将其设置为
    CURSOR\u HAND
    ,则不会显示任何双向光标

  • 自动重定尺寸模式
    也会引发“问题”
    ,使宽度调整变得更加困难。将其设置为禁用时,当您拖动列边缘时,它可以移动,但不能自由移动。确保将
    autoResizingMode
    设置为
    JTable.AUTO\u RESIZE\u后续列
    JTable.AUTO\u RESIZE\u NEXT\u列
    ,以查看重大更改

  • (半年后,当我回到我的答案时,我仍然觉得它有用…) 如果禁用包含该表的
    JScrollPane
    ,光标也不会更改,并且不会显示双向光标

  • 确保您的标题是要配置的标题
  • 因此,对于:

    JTableHeader headerResumen = tbResumen.getTableHeader();
    headerResumen.setResizingAllowed(true);
    
    我只是创建了另一个具有与我的表相同的
    模型的头,并在那里进行了配置,没有意识到我创建的新头不是我的表的头。我必须调用
    table.getTableHeader()
    来获取我想要的头,并且配置可以工作。为你的愚蠢道歉

  • 确保将光标悬停在此表中各列之间的边上时,已将光标设置为默认光标,以便您可以看到它变成一个双向箭头,并且您知道它们是可调整的

    tbResumen.setCursor(Cursor.getPredefinedCursor(Cursor_DEFAULT))

  • 如果将其设置为
    CURSOR\u HAND
    ,则不会显示任何双向光标

  • 自动重定尺寸模式
    也会引发“问题”
    ,使宽度调整变得更加困难。将其设置为禁用时,当您拖动列边缘时,它可以移动,但不能自由移动。确保将
    autoResizingMode
    设置为
    JTable.AUTO\u RESIZE\u后续列
    JTable.AUTO\u RESIZE\u NEXT\u列
    ,以查看重大更改

  • (半年后,当我回到我的答案时,我仍然觉得它有用…) 如果禁用包含该表的
    JScrollPane
    ,光标也不会更改,并且不会显示双向光标


  • “有什么想法吗?”为了更快地获得更好的帮助,请在阅读链接后发布一个经过编辑的or问题。如果有任何想法…谢谢。你显然不理解链接,因为不可编译的代码片段可能是M,但不是问题的C、V或E。请注意,如果一个完整、可编译和可运行的示例确实需要一个合适的MCVE,那么它可能是150 LOC。MCVE的良好测试如下所示。将“MCVE”粘贴到IDE中的新项目中。干净地编译它,运行它以查看问题。“有什么想法吗?”为了更快地获得更好的帮助,请在阅读链接后发布一个或。编辑的问题。如果有任何想法…谢谢。你显然不理解链接,因为不可编译的代码片段可能是M,但不是问题的C、V或E。请注意,如果一个完整、可编译和可运行的示例确实需要一个合适的MCVE,那么它可能是150 LOC。MCVE的良好测试如下所示。将“MCVE”粘贴到IDE中的新项目中。干净地编译它,运行它来查看问题。谢谢你的回答,不过我发现了一些其他的东西。我会把它放在下面的。谢谢你的回答,不过我发现了别的。我会把它放在下面。