首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

JButton的Text有关问题

2012-04-08 
JButton的Text问题我想在JButton上实现一个功能,最初JButton上显示“点击”,点击JButton后会出现倒计时功能,

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

热点排行