Я создаю Java-приложение.GameView имеет BoardView, который содержит несколько PawnView (в примере только один).
Пример:
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 получает белый фон.
Я также пытался переопределить функцию paintComponent JPanel также без эффекта.
Это происходит только на MacOS X (полностью обновлено), но у меня также есть некоторые проблемы с перерисовкой в Windows.
Может кто-нибудь помочь?