Лучший способ добиться этого - создать собственный класс, реализующий интерфейс Icon
, который просто рисует две заданные иконки рядом.
public class TwoIcon implements Icon {
private final int iconGap = 2;
private final Icon icon1;
private final Icon icon2;
public TwoIcon(final Icon icon1, final Icon icon2) {
this.icon1 = icon1;
this.icon2 = icon2;
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
int mid = getIconHeight() / 2;
int y1 = y + mid - icon1.getIconHeight() / 2;
int y2 = y + mid - icon2.getIconHeight() / 2;
icon1.paintIcon(c, g, x, y1);
icon2.paintIcon(c, g, x + icon1.getIconWidth() + iconGap, y2);
}
@Override
public int getIconWidth() {
return icon1.getIconWidth() + icon2.getIconWidth() + iconGap;
}
@Override
public int getIconHeight() {
return Math.max(icon1.getIconHeight(), icon2.getIconHeight());
}
}
Значки будут рисоваться рядом с отступом 2
и по центру по вертикали. Поиграйте с интервалами, если вы хотите, чтобы они были выровнены по-разному.
Icon leftIcon = ...
Icon rightIcon = ...
button.setIcon(new TwoIcon(leftIcon, rightIcon));
Результат: я просто использую иконки, которые рисуют здесь цвет solid. Один имеет размер 16x16
, а другой 20x20
для демонстрации вертикального выравнивания.
Фактически это не ограничивается JButton
и будет для любого JComponent
, который может использовать значок, например JLabel
et c.