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(); } }); } }