JButton的Text问题
我想在JButton上实现一个功能,最初JButton上显示“点击”,点击JButton后会出现倒计时功能,最后JButton消失。
即点击后出现10,过一秒后出现9,。。。。知道最后等于1,然后消失。
在监听器里我是这样写的:
public void mouseClicked(MouseEvent evt) {
while(num > 0){
jButton1.setText(num+"");
num--;
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(NewJPanel.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
这段代码是直接显示最后那个数字的,有什么办法让数字逐一显示?
[解决办法]
不要堵塞当前线程Thread.sleep(1000); 要么新开一个线程,要么用timer控制
have a try
- Java code
public void mouseClicked(MouseEvent evt) { Object source = e.getSource(); if (source == jButton1 && jButton1.getEnabled()) { jButton1.setEnabled(false); final javax.swing.Timer t = new javax.swing.Timer(1000, new ActionListener(){ int num = 10; public void actionPerformed(ActionEvent e) { jButton1.setText(num+""); num--; if (num == 0) { t.stop(); jButton1.setEnabled(true); } } }); t.start(); }}
[解决办法]
对于SWING当中的定时器,JDK提供了javax.swing.Timer这个类,下面贴一个完整的Demo,你可以借鉴一下
- Java code
import javax.swing.*;import java.awt.*;import java.awt.event.*;/** * javax.swing.Timer的一个实例 * @author ioe_gaoyong * */public class NumberDemo extends JFrame{ private int number=10;//初始值为10 private JButton numBtn; private Timer timer; private class NumListener implements ActionListener{ @Override public void actionPerformed(ActionEvent event) { // TODO Auto-generated method stub numBtn.setText(number+""); number--; if (number == 0) { numBtn.setText("stop"); timer.stop(); numBtn.setEnabled(true); } } } public NumberDemo(String title){ super(title); numBtn=new JButton("Click"); numBtn.addMouseListener(new MouseListener(){ @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub Object source = e.getSource(); if (source == numBtn && numBtn.isEnabled()) { numBtn.setEnabled(false); timer=new Timer(1000,new NumListener()); timer.start(); } } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } }); this.add(numBtn); this.pack(); this.setLocationRelativeTo(null); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args){ new NumberDemo("NumberDemo"); }}
[解决办法]
顶楼上,用Timer