Stackoverflowで同様の質問を見つけましたが、何らかの理由で提案されたものを実装しようとすると、奇妙な例外が発生します。
そのため、3つの列の高さの一部を動的に調整しようとしています。
public class AcquisitionTechniquesPanel extends JPanel {
private static final long serialVersionUID = -3326535610858334494L;
public static final int SIZE_OF_TABLE = 8;
private final JTable table;
private JCheckBox acquisitionTechniquesDone;
private Object[][] tableData;
private final String[] columnNames;
public AcquisitionTechniquesPanel() {
this.columnNames = new String[] { ApplicationStrings.ID, ApplicationStrings.TYPE, "Foo", "Bar", "Biz", "Baz", "Boz", ApplicationStrings.NO_OF_AR_S };
this.table = new JTable(tableData, columnNames);
initGUI();
}
public void initGUI() {
table.setColumnSelectionAllowed(
table.setDragEnabled(false);
table.setOpaque(true);
table.getTableHeader().setReorderingAllowed(false);
table.setModel(new DefaultTableModel());
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setPreferredSize(new Dimension(800, 320));
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
table.getColumnModel().getColumn(2).setCellRenderer(new VariableRowHeightRenderer());
table.getColumnModel().getColumn(3).setCellRenderer(new VariableRowHeightRenderer());
table.getColumnModel().getColumn(4).setCellRenderer(new VariableRowHeightRenderer());
}
});
}
public static class VariableRowHeightRenderer extends JLabel implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setText(String.valueOf(value));
if(getPreferredSize().height > 1)
table.setRowHeight(row, getPreferredSize().height);
return this;
}
}
}
このコードを実行すると、何らかの理由で
、テーブルに8列が必要なため、奇妙なjava.lang.ArrayIndexOutOfBoundsException: 2 >= 0
コードでこの例外が発生します。table.getColumnModel().getColumn(2).setCellRenderer(new VariableRowHeightRenderer());
誰かが私が間違っていることを知っていますか?
関連するコードのみを表示していることに注意してください