几天后,我一直在研究Java中的Timer
程序。
工作原理是,您打开程序并JLabel
计数。由于某种原因,它不会重复,只能工作一次。
这是我的代码。
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.SwingConstants;
import java.awt.Font;
public class TimerC extends JFrame implements ActionListener{
Timer t = new Timer(5, this);
public int intClicked;
public String stringClicked;
public JLabel clicked;
public TimerC() {
t.start();
JPanel p1 = new JPanel();
getContentPane().add(p1);
p1.setLayout(null);
JLabel clicked = new JLabel();
clicked.setFont(new Font("Tahoma", Font.PLAIN, 64));
clicked.setHorizontalAlignment(SwingConstants.CENTER);
clicked.setText("0");
int intClicked = 1;
String stringClicked = String.valueOf(intClicked);
clicked.setText(stringClicked);
p1.add(clicked);
clicked.setSize(42, 100);
clicked.setLocation(191, 97);
}
@Override
public void actionPerformed(ActionEvent e) {
}
}
答案 0 :(得分:1)
TimerC()
内的那一行,JLabel clicked = new JLabel();
移除JLabel
infront clicked
,因为您已经声明已点击外部,并且通过这种方式您再次声明为局部变量。阅读变量范围。
我不知道你是否注意到了,但你使用的字体大小很大,你的JLabel尺寸不够大,试试改变它的大小:
clicked.setSize(200, 100);
将某些行为定义为actionPerformed
@Override
public void actionPerformed(ActionEvent e) {
clicked.setText(intClicked++ + " ");
// this.repaint(); it's not necessary
}
答案 1 :(得分:1)
作为一种优秀的编程习惯,始终建议在代码流中完成对象构造完成后,将自引用this
传递给其他对象。在代码示例中,
public class TimerC extends JFrame implements ActionListener{
Timer t = null;
public JLabel clicked;
public TimerC() {
...
clicked = new JLabel();
...
intClicked = 1;
...
clicked.setSize(42, 100);
clicked.setLocation(191, 97);
t = new Timer(5, this);
t.start();
}
@Override
public void actionPerformed(ActionEvent e) {
intClicked = intClicked + 1;
clicked.setText(String.valueOf(intClicked));
clicked.repaint();
}
}
答案 2 :(得分:0)
对于每次第二次更新,您需要Timer t = new Timer(1000, this);
并使用actionPeformed
,如下所示:
public void actionPerformed(ActionEvent e) {
System.out.println(e);
clicked.setText(String.valueOf(intClicked++));
}