Для такого конкретного случая вам необходимо создать свою собственную границу.
Ниже приведен пример с градиентом класса границы:
public static class GradientBorder implements Border
{
private Insets margin;
public GradientBorder (int top, int left, int bottom, int right)
{
super();
margin = new Insets (top, left, bottom, right);
}
public void paintBorder (Component c, Graphics g, int x, int y, int width, int height)
{
Graphics2D g2d = (Graphics2D) g;
g2d.setPaint (new GradientPaint (x, y, Color.RED, x + width, y, Color.BLUE));
Area border = new Area (new Rectangle (x, y, width, height));
border.subtract (new Area (new Rectangle (x + margin.left, y + margin.top,
width - margin.left - margin.right, height - margin.top - margin.bottom)));
g2d.fill (border);
}
public Insets getBorderInsets (Component c)
{
return margin;
}
public boolean isBorderOpaque()
{
return true;
}
}
Ofcourse вы можете указать любое другое направление градиента цвета e.t.c. Вы также можете поместить их инициализацию в конструктор (если вам это нужно). Для этого вам просто нужно установить границы (в любом JComponent преемнику):
jComponent.setBorder (new GradientBorder (25, 50, 25, 50));
В принципе вы можете создать любую границу вы любите этот путь с любыми красящими/анимация/формы e.t.c.
И, кстати, метод isBorderOpaque() должен возвращать true, если вы хотите создать полупрозрачную рамку (например, с полупрозрачными цветами, сформированными с закругленным углом и т. Д.), Иначе вам придется иметь дело с проблемы перекраски компонентов.