对于面板内的 JTable,如果面板变大,我如何将额外的空间仅分配给某些列(在我的例子中,分配给最后一列,尽管提供“第 3,4 列和8 将获得额外的空间)。
我想允许用户手动更改所有列的列大小。
我尝试了 table.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
当 JTable 调整大小时,这会将额外的空间分配给所有可调整大小的列。在 JTable 的 JavaDoc 中,对于 doLayout(),说道:
当由于调整封闭窗口的大小而调用该方法时,resizingColumn 为 null。这意味着调整大小是在 JTable“外部”进行的,并且更改(或“增量”)应该分布到所有列,而不管此 JTable 的自动调整大小模式如何。
可能有一种方法可以拦截“JTable 正在调整大小”事件,并执行一些自定义操作,尽管我还没有弄清楚。
另一种解决方案提出于如何在 JTable 中排除自动调整大小的列 https://stackoverflow.com/questions/5469739/how-to-exclude-columns-from-auto-resizing-in-a-jtable虽然它并没有真正告诉我如何在摇摆中做到这一点。
覆盖doLayout()
拦截布局的方法。这给出了基础知识。您需要确定当最后一个列宽度即将变为负数时要执行的操作。
import javax.swing.*;
import javax.swing.table.*;
public class Test2Table
{
private static Object[][] data = new Object[][]
{
{ "a", "b", "c" },
{ "d", "e", "f" }
};
private static Object[] colNames = new Object[] { "1", "2", "3" };
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run() {
JTable table = new JTable(data, colNames)
{
@Override
public void doLayout()
{
// Viewport size changed. Change last column width
if (tableHeader != null
&& tableHeader.getResizingColumn() == null)
{
TableColumnModel tcm = getColumnModel();
int delta = getParent().getWidth() - tcm.getTotalColumnWidth();
TableColumn last = tcm.getColumn(tcm.getColumnCount() - 1);
last.setPreferredWidth(last.getPreferredWidth() + delta);
last.setWidth(last.getPreferredWidth());
}
else
{
super.doLayout();
}
}
};
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.pack();
frame.setVisible(true);
}
});
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)