JTableのJTalbeHeaderの高さを変更して列幅の合計が1200ピクセルを超えて横スクロールするとバグった。

JTableのJTalbeHeaderの高さを変更して列幅の合計が1200ピクセルを超えて横スクロールするとバグった。


原因はつかめてないのだけども現象として記録。


APIのバグっぽいんだけどなー。

以下ソース

public class TableTest {
	
//検証1
//	private Object data[][] = { { "1", "2", "3", "4", "5", "6", "7", "8", "9",
//			"10", "11", "12", "13", "14", "15", "16", "17" } };
//
//	private String columnNames[] = { "1", "2", "3", "4", "5", "6", "7", "8",
//			"9", "10", "11", "12", "13", "14", "15", "16", "17" };

	//検証2
	private Object data[][] = { { "1", "2", "3" } };

private String columnNames[] = { "1", "2", "3"};
	public TableTest() {
		JFrame frame = new JFrame("Tabletest");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		TableModel model = new DefaultTableModel(data, columnNames);
		JTable table = new JTable(model);
		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		JTableHeader jheader = table.getTableHeader();
		Dimension dim = jheader.getPreferredSize();
		dim.height = 35; 
		jheader.setPreferredSize(dim);
		table.setSize(300, 200);
		
		for (int i = 0; i < columnNames.length; i++) {
			TableColumn tc = table.getColumn(columnNames[i]);
			//検証1の場合は100に設定して12カラム目でバグ
			//検証2の場合は1200に設定して2カラム目でバグ
			//どちらもJTableHeaderの高さ設定の部分をコメントアウトすると正常
			tc.setPreferredWidth(1200); 
		}
		frame.add(new JScrollPane(table), BorderLayout.CENTER);
		frame.setSize(300, 300);
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				new TableTest();
			}
		});

	}
}