我正在构建Java应用程序。 GameView有一个包含多个PawnViews的BoardView(在这个例子中只有一个)。在JPanel上更改位置JLabel重绘
例子:
public class GameView extends Frame
{
public GameView()
{
AWTUtilities.setWindowOpaque(this, false);
this.setUndecorated(true);
this.setLayout(null);
this.setResizable(false);
this._boardview = new BoardView();
int x = 0;
int y = 0;
PawnView pv = new PawnView();
this._boardview.AddPawn(pv, 10, 10);
this._boardview.MovePawn(pv, 20, 10);
}
}
public class BoardView extends JPanel
{
public BoardView()
{
this.setOpaque(false);
RepaintManager.currentManager(null).setDoubleBufferingEnabled(true);
this.setLayout(null);
}
@Override
public void update(Graphics g)
{
paint(g);
}
public void AddPawn(PawnView pawnview, int x, int y)
{
this.add(pawnview);
pawnview.setLocation(x, y);
}
public void MovePawn(PawnView pawnview, int x, int y)
{
pawnview.setLocation(x, y);
//this.repaint();
}
}
public class PawnView extends JLabel
{
public PawnView()
{
this.setOpaque(false);
RepaintManager.currentManager(null).setDoubleBufferingEnabled(true);
this.setLayout(null);
}
}
起初一切看上去很不错(不MovePawn):
http://dl.dropbox.com/u/7438271/1.png
当我打电话MovePawn它看起来像:
http://dl.dropbox.com/u/7438271/2.png
我试着请拨打this.revalidate()
,this.updateUI()
,this.repaint()
,this.paintImmediately()
以各种形式,但它们都使情况变得更糟:整个JPanel获得白色背景。
我也尝试覆盖JPanel的paintComponent函数也没有效果。
这只发生在Mac OS X(完全更新)上,但我也遇到了在Windows中重新绘制的一些问题。
任何人都可以请帮忙吗?
我认为我们需要更多的信息能够更好地帮助你。你能否尽可能简化问题,甚至创建一个我们可以编译和运行的最小代码示例,它演示了你的问题,但是不包含与问题无关的多余代码,[sscce](http:// SSCCE)? – 2012-03-16 22:35:23