Я использовал метод setText для изменения, но он не работает.Когда я отлаживал свою программу, я заметил, что setText () не работал должным образом, поскольку он просто показывает последнюю вещь, в то время как его цикл идет до 60 секунд.
Например, я хочу увидеть всечисла от 1 до 60, но он показывает только 59.
Из того, что я увидел в результате нажатия кнопки JButton, я думаю, что нет проблем с Actionlistener.Вот почему я несколько раз менял логику, но всегда происходило одно и то же.
public class Game extends JFrame implements ActionListener {
JLabel jTimer = new JLabel();//Showing time
JLabel jScore = new JLabel("");//Showing score
Game() {
JFrame Gframe = new JFrame("Game play");
Gframe.setBounds(400, 400, 800, 800);
Gframe.setLayout(null);
JPanel pScore = new JPanel();
EtchedBorder border = new EtchedBorder();
JLabel score = new JLabel(" Score ");
Font font1 = new Font("굴림", Font.PLAIN, 20);
jScore.setPreferredSize(new Dimension(5, 5));
score.setFont(font1);
score.setBounds(330, 30, 100, 100);
score.setBorder(border);
Font font2 = new Font("고딕체", Font.PLAIN, 20);
JLabel ttime = new JLabel(" Time ");
JButton start = new JButton("START");
start.setFont(font2);
start.setBounds(150, 40, 100, 100);
start.setBorder(border);
start.addActionListener(this);
jTimer.setLayout(null);
jTimer.setBounds(330, 30, 300, 300);
ttime.setFont(font2);
ttime.setBounds(200, 15, 100, 100);
ttime.setBorder(border);
pScore.setLayout(new GridLayout(2, 2));
pScore.setBounds(330, 30, 200, 100);
pScore.add(score);
pScore.add(ttime);
pScore.add(jScore);
pScore.add(jTimer);
add(start);
Gframe.add(pScore);//Including Score&Time
Gframe.add(start);//Adding Start Butto
Gframe.setVisible(true);
}
public void setTimer() {
int i = 0;
while (true) {
try {
System.out.println(i);
jTimer.setText(i + "Sec");
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i++;
if (i == 60) {
break;
}
}
}
// When this method is performed,
// The result indicates that The println(i) shows correctly as a timer
// but jTimer.setText() don't show at all.
// What's more During the playing time, Jbutton(Start) is clicked until it's finished completely.
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
if (str.equals("START")) {
System.out.println("Counting");
setTimer();
}
}
}
Я ожидаю, что JLabel (jTimer) показывает все числа, но фактический результат - просто предыдущее число.