繁体   English   中英

将多个图形添加到单个JPanel

[英]Adding multiple graphics to a single JPanel

我试图添加3个图形,其中两个必须移动(大概是通过彼此移动,在单个轴上移动),并且只有添加到面板的lattermost显示。

换句话说,我在JFrame中添加了许多面板,在最大的面板中,我使用特定坐标放入了图形对象。 显示代码可能更有帮助。

//the gameArea is the referred-to JPanel, above this code    
TankOne tank1 = new TankOne(Color.GREEN);
TankTwo tank2 = new TankTwo(Color.MAGENTA);
FieldBar fieldb = new FieldBar(Color.getHSBColor((float) Math.random(),(float) Math.random(),(float) Math.random()));
JPanel tank1panel = new JPanel();
JPanel tank2panel = new JPanel();
tank1panel.add(tank1);
tank2panel.add(tank2);
gameArea.add(tank1panel);
gameArea.add(tank2panel);
gameArea.add(fieldb);
//repaint code here

如你所见,这是坦克游戏。 显示在GUI上的是最后一个gameArea.add。 [这里是fieldb,一个显示游戏场地的栏]。

这里的尝试是我试图将两个新面板放入gameArea Jpanel,然后将两个坦克对象放入其中。 仍然没有骰子。

有没有一种解决方法可以让我按像素移动坦克? 我已经看到一些答案包括切换到gridlayout,但我不认为这将有助于看到额外的Panels什么也没做。

谢谢您的回答。

我猜每个坦克JPanel显示一个坦克的图像(?不是100%肯定)。 一些建议,但请告诉我,如果我的假设偏离基础:

  • 保持逻辑和视图很好地分离la MVC。
  • paintComponent(...)方法中,在单个JPanel(可能称为DrawingPanel)中执行所有图形。
  • Background图像将是一个BufferedImage,它在DrawingPanel的paintComponent(...)方法中绘制。
  • 坦克本身不会由JPanel表示,而是它自己的小BufferedImage精灵,再次在paintComponent方法中绘制,但背景图像之后绘制。
  • 每个坦克需要至少4个精灵,每个方向一个。
  • 如果您的坦克沿对角线移动,您可能需要更多的精灵。
  • 还有一个单独的用于炮塔的精灵/图像。
  • 您将移动精灵的绘制位置以响应其模型表示位置的变化。
  • 炮塔旋转也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM