私はSwingを学んでおり、次のコードを持っています:
public class SimView {
private JFrame frame;
private JLabel background;
private JPanel car_panel;
public SimView() {
frame = new JFrame("GUI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 500);
frame.getContentPane().setLayout(null);
background = new JLabel("");
background.setIcon(new ImageIcon(
"C:\\Users\\D__\\Desktop\\background.png"));
background.setBounds(0, 0, 384, 462);
frame.getContentPane().add(background);
frame.setVisible(true);
car_panel = new JPanel();
car_panel.setBounds(175, 430, 16, 21);
car_panel.setVisible(true);
car_panel.setBackground(Color.BLACK);
background.add(car_panel);
MoveCarRunnable carMover = new MoveCarRunnable(car_panel);
}
private static class MoveCarRunnable implements Runnable {
private JPanel car;
MoveCarRunnable(final JPanel car) {
this.car = car;
}
@Override
public void run() {
// Should I call rePaint() on the car_panel here then ?
}
}
私がやりたいのは、「車」と呼ばれる JLabel の sy 座標を更新ごとに移動して、それ自体が移動する効果を得る、つまりユーザーの操作がないことです。これを行う方法がよくわかりません。更新ごとに JLabel の位置を再描画するある種の repaint() メソッドが必要だと思います。しかし、位置を更新する必要があることをこのクラスに知らせるにはどうすればよいでしょうか?
ポインタ(リンク/コード)をいただければ幸いです。この場合、単にソリューションを採用するのではなく、Swing とそのコンポーネントがどのように機能するかの概念を理解したいと思っていますが、もちろん、ソリューションに興味があるので、詳しく調べることができます。ありがとう
編集: 上記の編集コードを参照してください