当前位置: 首页 > 知识库问答 >
问题:

带有Swing的Java线程

劳和雅
2023-03-14

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

我决定使用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”读取一个数组列表,其中包含我的圆应该指向的坐标。

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

如果我记得很清楚,我应该使用线程,但我试图实现它们,但我无法启动。

谢谢你的帮助

共有2个答案

谷梁翰飞
2023-03-14

感谢罗宾(见我第一篇帖子的评论),Swing Timer似乎是迄今为止最好的解决方案。我拔掉了我那可怕的线。睡觉并设置计时器,它可以工作,再次感谢。

也谢谢你圣殿骑士

楮乐邦
2023-03-14

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

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

 类似资料:
  • 问题内容: 我知道我知道,到处已经有上百万个问题和答案。关于它的大量真正详尽的文章,几种示例。我已经花了几个小时阅读有关它的信息,但这并不能解决问题。我之所以这样问,是因为我仍然不安静地理解我需要做的事情,显然是因为我的代码仍然无法正常工作。我想到了Swing如何与EDT一起工作,并且如果要使用ServerSocket的accept()方法,我将需要为Swing启动一个新线程(我认为?)。当我按原

  • 问题内容: 可以在Swing应用程序中使用Font Awesome吗?如果可能的话,那么如何将其图标与Swing组件(JButton或JLabel)一起使用。我之前在Primefaces应用程序中使用过Font Awesome。 问题答案: 在http://jiconfont.github.io/尝试jIconFont(Swing或JavaFX) 例:

  • 问题内容: 我正在尝试用Java绘制曲线。一个简单的以(X,Y)开始,(X,Y)结束和曲线量的贝塞尔曲线就足够了。 我找不到在Swing中执行此操作的方法。如果不在Swing中,我可以使用一些简单的数学方法吗?我将如何在Swing中实现它? 编辑:我知道如何通过重写paint(Graphics g)方法绘制形状和线条。 问题答案: 您可以使用Java 2D Object Path2D.Double

  • 我使用以下代码,每0.5秒用相同的句子,但用另一个点替换一个JLabel。 这是使用线程的真正目的吗?这会影响程序的速度吗?如果我正在做的事情是如此愚蠢,有没有其他方法可以做这样愚蠢的事情?

  • 本章将介绍如何使用Canvas和javax.swing包的JFrame类绘制JOGL基本框架。 在这里,我们将实例化一个JFrame,并使用add()方法将canvas对象添加到JFrame的实例中。 使用Canvas和AWT为您提供具有重量级功能的图形框架。 要拥有轻量级图形框架,您需要将GLCanvas与Swing一起使用。 将GLCanvas与Swing一起使用时,可以直接将GLCanvas

  • 我用创建了,其中使列可编辑。当我单击一个时,将显示此jtable,如果我在第一行中键入并按enter键,则它将向jtable添加新的空行。但我的问题是,当添加新的空行时,单元格应该具有光标,就像我们在任何编辑器或TextField中看到的那样。 我在这里附上了我期望的输出截图 在图像中,你可以看到垂直条,这是指示当前的焦点,但我希望它应该是自动的所有新行时,我添加新行。 提前谢了。