2016-07-28 161 views
-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图像!

+3

为了更快地获得更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。但'this.setLayout(null);'不是好兆头.. –

+0

这段代码有问题吗?我不认为哟如果你给我们无关的代码,你不会得到帮助! – gpasch

+0

请勿在paintComponent()方法中使用setOpaque(false)。绘画方法仅用于绘画,您不应该在绘画方法中更改组件的属性。在构造函数中设置属性。 – camickr

回答

0

所以我想通了;我将这个JPanel添加到另一个JPanel而不是一个JFrame。不完全确定为什么,但直接添加到JFrame后,所有工作都完美无缺。