2011-08-02 54 views
1

我想创建一个JButton,它会在第一次单击之后定期更改其文本。我对Swing库不太了解。什么是一个好的起点?我可否不更新文字而不采取行动?定期更改JButton文本

谢谢。

+0

你的意思是说当按钮被点击时它改变它的文本?或者是什么? –

+0

不,我想改变文本没有点击,让每隔2秒 –

回答

2

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

您还可以使用TimerTask类java.util中类似如下:

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. 
+0

所以每当我想要的时间到了,我需要重绘或只是setText –

+0

@Mehmet:只是'setText(newStr)'应该工作。 –

+0

非常感谢,这是我需要的。 –

1

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

1

我建议你创建一个定时器(here你可以找到一些DOC)

Timer timer = new Timer(100,this); 

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

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

卢卡

3

在摇摆的所有定期活动中,我只建议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(); 
      } 
     }); 
    } 
} 
+0

+1使用摆动计时器。 – mre

1

所有其他的答案没有提到如何更新非周期性。如果你需要它不规则地更新,你可以在你的GUI类中创建一个类似下面的方法:updateButton();每当你想要改变你的文字时就打电话给他。

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

只是想我会添加这个以防万一有人想不规则地设置它。