0

鉄道に関するプロジェクトを説明したいと思います。

Swingを使うことにしました。JPanel に背景地図があり、線路上を移動する小さな円を描きます。列車が 1 つしかない場合は完全に機能しますが、さらに列車を追加したいと考えています。

これが私がやり始めた(そして機能する)ものです:

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 を作成する必要がありますか?それともすべてのサークルで 1 つだけ作成する必要がありますか?

よく覚えていれば、スレッドを使用する必要がありますが、実装しようとしても開始できません。

ご協力ありがとうございました

4

2 に答える 2

1

列車を格納する中央データ オブジェクトを使用できます。すべてのサイクルで、列車はスイングの内側に描画されます。反対側では、列車はスレッドから更新されます。

別のアプローチには、描画され、内部でスレッドを実行して自己更新する train オブジェクトが含まれます。

于 2013-06-27T13:40:14.580 に答える
0

Robin に感謝します (私の最初の投稿のコメントを参照してください)。これまでのところ、Swing Timers が最適なソリューションのようです。ひどい Thread.sleep を削除し、代わりにタイマーを設定しました。動作します。ありがとうございます。

テンプラーもありがとう

于 2013-06-28T17:20:39.530 に答える