以下に示すように、paintComponent() メソッドをオーバーライドして、カスタム ラベルを作成しました。しかし、このコンポーネントで setBackground() メソッドを呼び出すと。長方形全体をペイントします。カスタムシェイプだけペイントしたいのですが、助けてください。
カスタムラベルコード:
public class CustomLabel extends JLabel {
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Rectangle rect = g.getClipBounds();
Polygon shape3 = new Polygon();
shape3.addPoint(rect.x, rect.y + rect.height - 1);
shape3.addPoint(rect.x + rect.width - 10, rect.y + rect.height - 1);
shape3.addPoint(rect.x + rect.width - 1, rect.y + rect.height / 2);
shape3.addPoint(rect.x + rect.width - 10, rect.y);
shape3.addPoint(rect.x, rect.y);
g.setColor(Color.LIGHT_GRAY);
g.drawPolygon(shape3);
}
}
編集 :
以下のようにコードを修正しました。
デフォルトの背景を白にしたいので、最初にラベルが作成されたとき、背景は白です。これで、画面にいくつかのラベルが表示されます。クリック イベントで背景色を変更します。たとえば、setbackground(Color.red) を呼び出すと、クリックされたラベルの色が更新されます。
画面をスクロールすると repaint() メソッドが呼び出され、すべてのカスタム ラベルが再描画され、すべてのラベルの背景が赤に変更されます。
編集 2: ラベルを追加するためのコード:
for (int i = 0; i < noOfLabels; i++)
{
String labelkey = "Label" +i;
CustomLabel label = new CustomLabel();
label.addMouseListener(this);
myLayeredPane.add(label, new Integer(3));
}
カスタムラベルのコード:
public class CustomLabel extends JLabel
{
private Color background = Color.WHITE;
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Rectangle rect = g.getClipBounds();
Polygon shape3 = new Polygon();
shape3.addPoint(rect.x, rect.y + rect.height - 1);
shape3.addPoint(rect.x + rect.width - 10, rect.y + rect.height - 1);
shape3.addPoint(rect.x + rect.width - 1, rect.y + rect.height / 2);
shape3.addPoint(rect.x + rect.width - 10, rect.y);
shape3.addPoint(rect.x, rect.y);
g.setColor(background);
g.fillPolygon(shape3);
g.setColor(Color.LIGHT_GRAY);
g.drawPolygon(shape3);
}
@Override
public void setBackground(Color arg0)
{
background = arg0;
System.out.println("Setting bg color to : "+background);
}
}