Đối với trường hợp cụ thể như vậy, bạn sẽ cần phải tạo đường viền của riêng bạn.
Dưới đây là một ví dụ với lớp biên giới gradient:
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, bạn có thể chỉ định bất kỳ hướng gradient khác, màu sắc e.t.c. Bạn có thể đặt khởi tạo của họ vào constructor (nếu bạn cần). Để sử dụng nó, bạn sẽ chỉ cần phải thiết lập biên giới (trong bất kỳ kế JComponent):
jComponent.setBorder (new GradientBorder (25, 50, 25, 50));
Về cơ bản, bạn có thể tạo ra bất kỳ biên giới bạn thích cách này với bất kỳ màu/hoạt hình/hình dạng e.t.c.
Và bằng cách này - phương thức isBorderOpaque() sẽ trả về true, nếu bạn muốn tạo đường viền nửa trong suốt (ví dụ với màu bán trong suốt, có góc tròn và như vậy), nếu không bạn sẽ phải xử lý vấn đề sơn lại thành phần.