-2
我正在创建一个空白的透明JPanel,然后绘制线条以形成框。我想增加箱子的大小,但是当我这样做的时候,我最终会留下一个线索,在线路之后。
我在网上做了很多搜索,但似乎无法找到适合我的解决方案。 任何帮助将不胜感激!图形不会透明透明JPanel
public class AVTBox extends JPanel {
private int boxSize = 100;
private boolean started = false, stopped = true, track = false;
private final int center = 150;
private final int maxBoxSize = 300, minBoxSize = 25;
private final int lockBoxSize = 30;
public AVTBox()
{
this.setOpaque(false);
this.repaint();
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g.create();
g2.setStroke(new BasicStroke(3.0f));
g2.setColor(Color.BLACK);
g2.draw(new Line2D.Double(center - (boxSize/2), center - (boxSize/2) + (boxSize*0.3),
center - (boxSize/2), center + (boxSize/2) - (boxSize*0.3))
);
g2.draw(new Line2D.Double(center + (boxSize/2), center - (boxSize/2) + (boxSize*0.3),
center + (boxSize/2), center + (boxSize/2) - (boxSize*0.3))
);
g2.draw(new Line2D.Double(center - (boxSize/2) + (boxSize*0.3), center - (boxSize/2),
center + (boxSize/2) - (boxSize*0.3), center - (boxSize/2))
);
g2.draw(new Line2D.Double(center - (boxSize/2) + (boxSize*0.3), center + (boxSize/2),
center + (boxSize/2) - (boxSize*0.3), center + (boxSize/2))
);
g2.dispose();
}
public void setBoxSize(String change)
{
switch (change) {
case "add":
if(boxSize < maxBoxSize)
{
boxSize++;
} break;
case "sub":
if(boxSize > minBoxSize)
{
boxSize--;
} break;
}
this.revalidate();
this.repaint();
}
}
编辑:一切正常,因为它应该在面板上有一个完整的非透明背景,但在透明背景上移动这些线留下油漆过的部分。我需要找到一种让这个'动画'在透明背景下工作的方法。
This image显示当用户增加盒子大小(绿色箭头)和此刻发生的事情(红色箭头)时应该发生的情况。
对不起,可怕的MSpaint图像!
为了更快地获得更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。但'this.setLayout(null);'不是好兆头.. –
这段代码有问题吗?我不认为哟如果你给我们无关的代码,你不会得到帮助! – gpasch
请勿在paintComponent()方法中使用setOpaque(false)。绘画方法仅用于绘画,您不应该在绘画方法中更改组件的属性。在构造函数中设置属性。 – camickr