繁体   English   中英

带Swing的Java线程

[英]Java threads with Swing

我想举例说明一个有关铁路的项目。

我决定使用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,其中包含我的圆应该去的坐标。

我真的不知道如何制造多列火车。 我应该创建几个JPanels还是与我所有的圈子一起创建一个?

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

谢谢您的帮助

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

另一种方法包含绘制训练对象并在其中运行线程以自我更新。

谢谢Robin(请参阅我的第一篇文章的评论),Swing Timers似乎是迄今为止最好的解决方案。 我删除了可怕的Thread.sleep并设置了计时器,它可以正常工作,再次感谢。

也谢谢你圣殿骑士

暂无
暂无

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

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