Заголовок Jtable с динамическим переносом строк и автоматической настройкой высоты
Я пытаюсь создать TableCellRenderer для JTable, который:
- переносить строки для длинных имен
- автоматическая настройка высоты жатки
- реагировать на изменение размеров таблицы и столбцов
public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame("test frame for line wrapping header table");
DefaultTableModel tableModel = new DefaultTableModel();
tableModel.addColumn("column 1");
tableModel.addColumn("column 2 with a long name");
tableModel.addColumn("column 3 with a very very very very very long name");
JTable table = new JTable(tableModel);
table.getTableHeader().setDefaultRenderer(new Renderer());
frame.add(new JScrollPane(table));
frame.setPreferredSize(new Dimension(300,200));
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
public class Renderer extends JTextArea implements TableCellRenderer {
public Renderer() {
setWrapStyleWord(true);
setLineWrap(true);
setBorder( new LineBorder(Color.BLACK, 1));
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
if (value instanceof String) {
setText((String) value);
}
return this;
}
}
С этим кодом у меня странное поведение:
- первая операция изменения размера значительно увеличивает высоту жатки
- заголовок никогда не восстанавливает свою надлежащую высоту
Я не знаю, как указать правильную высоту для заголовка, и либо это должно быть сделано из CellRenderer, либо нет.