一个小程序,想用线程实现在jpanel上搞出一行button,但是我的程序做出来后button不会动,程序改了三小时了,未果,请高指点江山:代码如下
package awt.test; import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.lang.*; public class AddButtonDemo { /**
* @param args
*/
//主程序
public static void main(String[] args) {
textFrame text =new textFrame();
text.show(); } }
//主窗口程序
class textFrame extends JFrame{
textFrame(){
this.setTitle("测试用");
this.setSize(300, 400);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
});
JButton sb1 =new JButton("测试用button");
textPanel panel =new textPanel(sb1);
//panel.setLayout(new FlowLayout());
Container c = getContentPane();
c.setLayout(new GridLayout(2,2)); demoThread t1 = new demoThread(panel);
Thread t2 =new Thread(t1);
t2.start(); c.add(panel);
c.setVisible(true);
}
}
//定义了一个新的panel,里边加载button
class textPanel extends JPanel{
JButton jb1 = null;
textPanel(JButton jb){
jb1=jb;
this.add(jb1);
this.setLayout(new FlowLayout());
}
public void addButton(){ this.add(jb1);
jb1.updateUI();
}
private JButton getbutton(){
return jb1;
} } //线程的定义,线程运行时会住panel里加button
class demoThread implements Runnable{
int i;
textPanel jb2=null;
textPanel jb3=null;
demoThread(textPanel jb){
jb2=jb;
}
public void run(){
while (i <=300){
jb2.addButton(); try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i++;
}
}
}
package awt.test; import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.lang.*; public class AddButtonDemo { /**
* @param args
*/
//主程序
public static void main(String[] args) {
textFrame text =new textFrame();
text.show(); } }
//主窗口程序
class textFrame extends JFrame{
textFrame(){
this.setTitle("测试用");
this.setSize(300, 400);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
});
JButton sb1 =new JButton("测试用button");
textPanel panel =new textPanel(sb1);
//panel.setLayout(new FlowLayout());
Container c = getContentPane();
c.setLayout(new GridLayout(2,2)); demoThread t1 = new demoThread(panel);
Thread t2 =new Thread(t1);
t2.start(); c.add(panel);
c.setVisible(true);
}
}
//定义了一个新的panel,里边加载button
class textPanel extends JPanel{
JButton jb1 = null;
textPanel(JButton jb){
jb1=jb;
this.add(jb1);
this.setLayout(new FlowLayout());
}
public void addButton(){ this.add(jb1);
jb1.updateUI();
}
private JButton getbutton(){
return jb1;
} } //线程的定义,线程运行时会住panel里加button
class demoThread implements Runnable{
int i;
textPanel jb2=null;
textPanel jb3=null;
demoThread(textPanel jb){
jb2=jb;
}
public void run(){
while (i <=300){
jb2.addButton(); try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i++;
}
}
}
楼主【wineer200】截止到2008-06-26 19:52:14的历史汇总数据(不包括此帖):
发帖数:6 发帖分:120
结贴数:0 结贴分:0
未结数:6 未结分:120
结贴率:0.00 % 结分率:0.00 %
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
但你的addBotton方法始终只有一个BOTTON对象在不停设置,改成下面这样
public void addButton(){ this.add(new Botton("sdafadfs"));
jb1.updateUI();
}
象楼上说的那样,你只有一个JButton对象存在,
只是反复操作而已,要new 新的对象才行啊