.. still don't believe me? Ok then, here it is structured as above and working...
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import static java.lang.Math.random;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.Timer;
public class RunPhysics extends JFrame {
private final int waits = 200; // 30 is smoother
private JLabel blackBoard = new JLabel();
private JLabel label = new JLabel("F=m*a -> O");
private JButton roll = new JButton("Roll");
private int labelX = 10;
private int labelY = 60;
private int die;
// private Timer timer;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new RunPhysics();
}
});
}
public RunPhysics() {
setSize(1000, 200);
setTitle("Running Physics");
setLayout(null);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setVisible(true);
getContentPane().add(blackBoard);
blackBoard.setBounds(10, 10, 980, 280);
blackBoard.add(label);
blackBoard.add(roll);
label.setBounds(30, 50, 100, 20);
roll.setBounds(10, 10, 60, 30);
roll.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent roller) {
roll.setEnabled(false);
timer.start();
}
});
}
private Timer timer = new Timer(waits, new ActionListener() {
@Override
public void actionPerformed(ActionEvent mover) {
labelX += 36; // += 4 is smoother
label.setLocation(labelX, labelY);
if (labelX < 900) {
return;
}
die = (int) (random() * 6 + 1);
System.out.println(die + " was rolled.");
labelX = 10;
if (die == 6) {
// let the label continue moving
} else {
timer.stop();
roll.setEnabled(true);
}
}
});
}