定期更改JButton文本

时间:2011-08-02 13:10:43

标签: java swing jbutton actionlistener

我想创建一个JButton,它会在第一次单击后定期更改其文本。我对Swing库并不熟悉。什么是一个好的起点?我可以在没有动作的情况下更新其文本吗?

谢谢。

5 个答案:

答案 0 :(得分:3)

对于Swing中的所有期刊事件,我只建议javax.swing.Timer

使用Timer输出的

应该是,例如

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.Timer;

public class CrazyButtonTimer {

    private JFrame frame = new JFrame(" Crazy Button Timer");
    private JButton b = new JButton("Crazy Colored Button");
    private Random random;

    public CrazyButtonTimer() {
        b.setPreferredSize(new Dimension(250, 35));
        frame.getContentPane().add(b);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        javax.swing.Timer timer = new Timer(500, new TimerListener());
        timer.setInitialDelay(250);
        timer.start();
    }

    private class TimerListener implements ActionListener {

        private TimerListener() {
        }

        @Override
        public void actionPerformed(final ActionEvent e) {
            Color c = b.getForeground();
            if (c == Color.red) {
                b.setForeground(Color.blue);
            } else {
                b.setForeground(Color.red);
            }
        }
    }

    public static void main(final String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                CrazyButtonTimer crazyButtonTimer = new CrazyButtonTimer();
            }
        });
    }
}

答案 1 :(得分:1)

如果要在每个固定的时间内更改它,那么您可以使用Swing Timer或Thread来执行此操作。但为此你必须至少听一个动作才能初始化并启动它。

您也可以使用java.util中的TimerTask类,如下所示:

java.util.TimerTask timerTask = new java.util.TimerTask() {
    @Override
    public void run() {
        //change button text here using button.setText("newText"); method
    }
};

java.util.Timer myTimer = new java.util.Timer();
myTimer.schedule(timerTask, 3 * 1000, 3* 1000); // This will start timer task after 3 seconds and repeat it on every 3 seconds.

答案 2 :(得分:1)

我建议您创建一个计时器(here,你可以找到一些文档)

Timer timer = new Timer(100,this);

您的类必须扩展动作侦听器ed实现以下方法,允许您更改JButton的文本(我称之为“`”按钮。

public void actionPerformed(ActionEvent e) {
  if(e.getSource.equals(timer)){
    button.setText("newText");
  }
}

卢卡

答案 3 :(得分:1)

所有其他答案都未提及如何非定期更新。如果需要不定期更新,可以在GUI类中创建一个名为:updateButton();每当你想要它改变你的文字时,只需要打电话。

public void updateButton(String newText)
{
     Button.setText(newText);
}

我想加上这个,万一有人想不定期地设置它。

答案 4 :(得分:0)

如果你想定期更改它(例如每隔5秒)你可以创建一个新的线程,它将按钮的文本设置为所需的值并重新绘制它(如果需要的话)。