Вы можете просто избавиться от ScrollPane и расположить заголовок и таблицу непосредственно на панели (с помощью null
LayoutManager, чтобы вы могли контролировать все самостоятельно):
static class TableTreeCellRenderer extends JPanel implements TreeCellRenderer {
private final JTable table;
TableTreeCellRenderer() {
table = new JTable();
setLayout(null);
add(table.getTableHeader());
add(table);
}
public Dimension getPreferredSize() {
Dimension headerSize = table.getTableHeader().getPreferredSize();
Dimension tableSize = table.getPreferredSize();
return new Dimension(Math.max(headerSize.width, tableSize.width),
headerSize.height + tableSize.height);
}
public void setBounds(int x, int y, int width, int height) {
super.setBounds(x, y, width, height);
int headerHeight = table.getTableHeader().getPreferredSize().height;
table.getTableHeader().setBounds(0, 0, width, headerHeight);
table.setBounds(0, headerHeight, width, height - headerHeight);
}
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
final String v = (String) ((DefaultMutableTreeNode) value).getUserObject();
table.setModel(new DefaultTableModel(new Object[][] {
{ v + "0", "1" },
{ v + "2", "3" }
}, new Object[] { "id", "value" } ));
invalidate();
return this;
}
}