/ 16 * 12 JLabels 16 * 12 ?
JPanel JFrame JPanel paint().
, JPanel, JPanel, , , , JPanel paint
:
int tileWidth = 50;
int tileHeight = 50;
for ( int x = 0; x < 16; x++ )
{
for ( int y = 0; y < 12; y++ )
{
Image tileImage;
int tileType = fieldArray[x][y];
switch ( tileType )
{
case 0:
{
tileImage = myGrassImage;
break;
}
case 2:
{
tileImage = myTreeImage;
break;
}
}
Graphics2D g;
g.drawImage(tileImage, x * tileWidth, y * tileHeight, null);
}
}
, , - , Painter ( , ).
public class TilePainter implements Painter
{
@Override
public void paint( Graphics2D g, Object thePanel, int width, int height )
{
}
}
-:
public class EntityPainter implements Painter
{
@Override
public void paint( Graphics2D g, Object thePanel, int width, int height )
{
g.drawImage(player.getImage(), player.getX(), player.getY(), null);
}
}
, NULL g.drawImage(), , ImageObserver, .
, , , JPanel !
, JPanel:
List<Painter> layerPainters;
:
public MyExtendedJPanel()
{
List<Painter> layerPainters = new ArrayList<Painter>();
TilePainter tilePainter = new TilePainter(Does,This,Need,Args);
EntityPainter entityPainter = new EntityPainter(Does,This,Need,Args);
layerPainters.add(tilePainter);
layerPainters.add(entityPainter);
}
, :
@Override
public void paint( Graphics g )
{
int width = getWidth();
int height = getHeight();
for(Painter painter : layerPainters)
{
painter.paint(g,this,width,height);
}
}