我是 Swing 的新手,我正在使用 JTable 对象来显示一些信息。 基本上该框架包含一个 JPanel -> GridBagLayout 管理器。 JPanel 包含一个 JLabel(“状态表”)、一个包含 JTable 的 JScrollPane、“排序依据”JButton 和一个 JComboBox。
如何设置列/列标题的宽度以完全显示其中包含的文本?
我尝试使用
table.getColumnModel().getColumn(i).setPreferredWidth(my_width);
但问题是,为了达到我想要的结果,所有列的宽度总和大于 JScrollPane 的宽度,所以什么也不会发生,它们将保持与以前相同的效果。
我尝试使用 JScrollPane 的 setSize 方法来将其大小调整为与窗口一样大...但是由于 GridBagLayout 管理器,它似乎无法大于某个大小,这仍然没有适合文本。
附加信息: JTable 是根据我实现的模型构建的,我修改的唯一 GridBagConstraint 是 gridx、gridy 和 fill = BOTH。
最佳答案
请参阅Table Column Adjuster一种简单的方法来调整每列的大小。
仅应将表格添加到滚动 Pane 中。您可能还需要使用:
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
允许每列以其首选大小显示。
the sum of all the columns' widths is larger than the JScrollPane's width, so nothing will happen,
您的 gridbag 约束有问题。该组件应该增长以填充所有空间。也许使用 BorderLayout 会更容易。将滚动 Pane 添加到中心,并将其他组件添加到北/南。您可以使用不同的布局管理器嵌套面板以获得所需的布局。
关于Java Swing JTable 和 JScrollPane 适合列宽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20909313/