2016-07-28 13 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(); 
} 
} 

EDIT:パネルはフル不透明な背景を持っていますが、透明な背景の上にこれらの行を移動すると、後ろの塗装部分を離れるときすべてはそれが必要として動作します。この「アニメーション」を透明な背景で動かす方法を見つける必要があります。

This image

は、ユーザがボックスのサイズ(緑の矢印)とどのモーメント(赤矢印)で起こるが増大するときに起こるべきかを示します。

ひどいMSpaintの画像申し訳ありません!

+3

、[MCVE]または[ショート、自己完結、正しい例](http://www.sscce.org/)を投稿してください。しかし、 'this.setLayout(null);'はうまくいきません。 –

+0

このコードに問題はありますか?私はあなたが私たちに無関係なコードを与えるなら、あなたは助けを得ないだろうと思う! – gpasch

+0

paintComponent()メソッドでsetOpaque(false)を使用しないでください。ペインティングメソッドはペイント専用です。ペイントメソッドでコンポーネントのプロパティを変更しないでください。コンストラクタでプロパティを設定します。 – camickr

答えて

0

だから私はそれを考え出しました。このJPanelをJFrameではなく別のJPanelに追加していました。どうしてすべてがJFrameに直接追加された後に完全に機能するのか、完全にはわかりません。早いほど良いのヘルプについて

関連する問題