覆蓋的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);
}
});
}
}
+1 ........... doLayout() – mKorbel 2013-05-04 07:41:50
這是非常有用的,謝謝。使用這種解決方案,它爲最後一列提供了所有額外的「鬆弛」空間,忽略了每列的「首選」大小,特別是在列的初始顯示中。我還想包括mKorbel的方法:如果可能,請遵守首選寬度(只在表格的初始顯示時需要),並在調整表格容器大小時將任何鬆散分佈到最後一列。我想出了一些(不完整的)黑客。有沒有簡單/優雅的解決方案? – Mary 2013-05-06 16:16:46
還發現http://developer.classpath.org/doc/javax/swing/JTable-source.html這是有用的(請參閱doLayout()部分),但不想重新創建整個輪子,如果我不'不得不。 – Mary 2013-05-06 16:19:16