Как сделать круглые углы у jButton с цветом background'a в java
Всем добрый день. Есть приложение на swing. В приложении есть панель с кнопками. Задача: У ВСЕХ кнопок надо закруглить углы. Желательно чтобы это было сделано через UIManager. Так же, стоит учесть что кнопкам задан фоновый цвет и цвет при зажатой кнопки. пробовал сделать так, но тогда фоновый цвет выходит за углы:
button.setBorder(new Border() {
@Override
public void paintBorder (Component c, Graphics g,int x, int y, int width, int height){
g.drawRoundRect(x, y, width - 1, height - 1, 13, 13);
}
@Override
public Insets getBorderInsets (Component c){
return new Insets(13 + 1, 13 + 1, 13 + 2, 13);
}
@Override
public boolean isBorderOpaque () {
return false;
}
});
Я в тупике)
Ответы (1 шт):
Автор решения: Максим Никитин
→ Ссылка
class CircleBtn extends JButton {
public CircleBtn(String text) {
super(text);
Dimension size = getPreferredSize();
size.width = size.height = Math.max(size.width, size.height);
setPreferredSize(size);
setContentAreaFilled(false);
}
@Override
protected void paintComponent(Graphics g) {
if (getModel().isArmed()) {
g.setColor(Color.GREEN);//Цвет фона при нажатой кнопке
setForeground(Color.yellow);//Цвет надписи при нажатой кнопке
} else {
g.setColor(getBackground());//Цвет фона
setForeground(Color.BLACK);//Цвет надписи
}
g.fillRoundRect(0, 0, getSize().width - 1, getSize().height - 1, 13, 13);
super.paintComponent(g);
}
@Override
protected void paintBorder(Graphics g) {
g.setColor(getForeground());
g.drawRoundRect(0, 0, getSize().width - 1, getSize().height - 1, 13,13);
}
}
Класс унаследованный от JButton. Переопределил в нем методы отрисовки формы кнопки paintBorder и метод отрисовки внутренних элементов paintComponent.