Per questo caso specifico è necessario creare il proprio bordo.
Ecco un esempio con classe di gradiente di frontiera:
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;
}
}
Naturalmente è possibile specificare qualsiasi altra direzione del gradiente, colori e.t.c. Puoi anche inserire la loro inizializzazione in costruttore (se ne hai bisogno). Per usarlo è sufficiente impostare confine (in qualsiasi successore JComponent):
jComponent.setBorder (new GradientBorder (25, 50, 25, 50));
In pratica è possibile creare qualsiasi confine ti piace questo modo con qualsiasi colorazione/animazione/forme e.t.c.
E tra l'altro - isBorderOpaque() metodo deve restituire true, se si desidera creare confine semi-trasparente (ad esempio, con i colori semi-trasparenti, a forma di angolo arrotondato e simili), altrimenti si avrà a che fare con problemi di riverniciatura dei componenti.