0

我想说明一个关于铁路的项目。

我决定使用 Swing。我在 JPanel 中有一张背景地图,我画了在铁路上移动的小圆圈。如果我只有一列火车,它会完美运行,但我想添加更多火车。

这是我开始做(和工作)的事情:

public static void main(String[] args) {

  // JFrame and background panel construction
  JFrame frame = new JFrame();
  JLayeredPane lpane = new JLayeredPane();
  ImagePanel panelBg = new ImagePanel(new ImageIcon("map.jpg").getImage());;

  frame.setPreferredSize(new Dimension(1791, 695));
  frame.setLayout(new BorderLayout());
  frame.add(lpane,BorderLayout.CENTER);
  lpane.setBounds(0,0,panelBg.getImg().getWidth(null),panelBg.getImg().getHeight(null));

  panelBg.setBounds(0,0,panelBg.getImg().getWidth(null),panelBg.getImg().getHeight(null));
  panelBg.setOpaque(true);

  lpane.add(panelBg, new Integer(0), 0);

  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.pack();
  frame.setVisible(true);
  go(lpane,panelBg);  
  }

private static void go(JLayeredPane pan,ImagePanel panBg) {

  Parcours panelP = new Parcours();
  panelP.setBounds(0,0,panBg.getImg().getWidth(null),panBg.getImg().getHeight(null));
  panelP.setOpaque(false);
  pan.add(panelP, new Integer(1), 0);

  for(int i=0; i<panelP.getTable().size(); i++){
    panelP.setPosX(panelP.getTable().get(i).getX()-6);
    panelP.setPosY(panelP.getTable().get(i).getY()-6);
    panelP.repaint();
    try{
      Thread.sleep(100);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
}

"go" 读取一个 ArrayList,其中包含我的圆圈应该去的坐标。

我真的不知道如何创建几列火车。我应该创建几个 JPanel 还是只创建一个包含所有圈子的 JPanel?

如果我没记错的话,我应该使用线程,但我尝试实现它们但我无法启动。

谢谢您的帮助

4

2 回答 2

1

您可以使用存储火车的中央数据对象。在每个周期中,火车都会在秋千内绘制。另一方面,火车会从您的线程中更新。

另一种方法包含火车对象,这些对象被绘制并在其中运行一个线程以自我更新它们。

于 2013-06-27T13:40:14.580 回答
0

Thank you Robin (see comments of my first post), Swing Timers seem to be the best solution so far. I removed my awful Thread.sleep and set timers instead, it works, thanks again.

Thank you Templar too

于 2013-06-28T17:20:39.530 回答