空の透明な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の画像申し訳ありません!
、[MCVE]または[ショート、自己完結、正しい例](http://www.sscce.org/)を投稿してください。しかし、 'this.setLayout(null);'はうまくいきません。 –
このコードに問題はありますか?私はあなたが私たちに無関係なコードを与えるなら、あなたは助けを得ないだろうと思う! – gpasch
paintComponent()メソッドでsetOpaque(false)を使用しないでください。ペインティングメソッドはペイント専用です。ペイントメソッドでコンポーネントのプロパティを変更しないでください。コンストラクタでプロパティを設定します。 – camickr