我通过覆盖 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);
}
}