По сути, отсутствуют две вещи. Прежде всего, JToolTip
расширяет JComponent
и, в отличие от JPanel
, не имеет макета по умолчанию. Чтобы растянуть content
по всплывающей подсказке, используйте BorderLayout
.
setLayout(new BorderLayout());
Вторая проблема - размер. ToolTipManager
соответствует предпочтительному размеру наконечника инструмента. В то время как BorderLayout
вычисляет размер, ToolTipUI
игнорирует его. Итак, есть две альтернативы: вручную установить предпочтительный размер ...
setPreferredSize(content.getPreferredSize());
Обратите внимание, что это не делает макет устаревшим; в противном случае вы получите пустую подсказку нужного размера.
... или подкласс ToolTipUI
для соблюдения макета, что я и сделал. Полученный код:
setComponent(StadtLabel.this);
JPanel images = new JPanel(null);
waren.setLayout(new BoxLayout(waren, BoxLayout.X_AXIS));
for(ImageIcon icon:myIcons) {
JLabel lbl = new JLabel(icon);
}
JPanel content = new JPanel(new BorderLayout());
content.add(new JLabel(title), BorderLayout.NORTH);
content.add(new JLabel(description));
content.add(images, BorderLayout.SOUTH);
setLayout(new BorderLayout());
add(content);
setUI(new ToolTipUI() {
@Override
public Dimension getMinimumSize(JComponent c) {
return c.getLayout().minimumLayoutSize(c);
}
@Override
public Dimension getPreferredSize(JComponent c) {
return c.getLayout().preferredLayoutSize(c);
}
@Override
public Dimension getMaximumSize(JComponent c) {
return getPreferredSize(c);
}
});