Untuk kasus khusus seperti ini, Anda perlu membuat Perbatasan Anda sendiri.
Berikut adalah contoh dengan kelas batas gradien:
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;
}
}
Tentu saja Anda dapat menentukan arah gradien lainnya, warna, dll. Anda juga dapat memasukkan inisialisasinya ke dalam konstruktor (jika Anda membutuhkannya). Untuk menggunakannya, Anda hanya perlu mengatur batas (di penerus JComponent mana pun):
jComponent.setBorder ( new GradientBorder ( 25, 50, 25, 50 ) );
Pada dasarnya Anda dapat membuat batas apa pun yang Anda suka dengan cara ini dengan pewarnaan/animasi/bentuk apa pun, dll.
Dan omong-omong - metode isBorderOpaque () harus mengembalikan nilai true, jika Anda ingin membuat batas semi-transparan (misalnya dengan warna semi-transparan, dibentuk dengan sudut membulat dan semacamnya), jika tidak, Anda harus berurusan dengan masalah pengecatan ulang komponen.
person
Mikle Garin
schedule
09.04.2012