下面是我用多线程编写计时器的代码,实现的功能是,每次我点击Add按钮,变量名为f的JFrame就会添加一个JTextField,里面的数目从50开始倒计。
问题是,我点Add时候,JTextField不会立刻添加到f中,要自己把f窗体最大化才能看到那个JTexField,重点是,我明明把f的窗口设置成足够大的,足够容纳几十个的JTexField,却也显示不了。。
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class Duoxiancheng {
JFrame f=new JFrame();
Button Add=new Button("Add");
Button close=new Button("close");
public void init()
{ Add.addActionListener(new xListener());
f.setLayout(new FlowLayout());
f.add(Add);
f.add(close);
f.setSize(500,500);
f.setVisible(true);
}
class xListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
new MyThread().start();
}
}
class MyThread extends Thread
{
String sum="50";
JTextField x=new JTextField();
{f.add(x);
}
public MyThread()
{
}
public void run()
{ int ix;
ix=Integer.parseInt(sum);
while(true){
x.setText(sum);
try{//close.enable(false);
ix=Integer.parseInt(sum);
ix=ix-1;
sum=String.valueOf(ix);
Thread.sleep(1000); //this.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
public static void main(String args[])
{
new Duoxiancheng().init();
}
}
------解决方案--------------------------------------------------------
添加完后,要刷新一下界面
------解决方案--------------------------------------------------------
repaint()一下。
------解决方案--------------------------------------------------------
呵呵,是的哦