import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Tim extends JFrame{
JPanel pnl;
JButton btn1=new JButton("开始");
JButton btn2=new JButton("停止");
FlowLayout flowLayout=new FlowLayout();
Timer obj;
Class cl;
Tim(){
super("Timer");
men();
action();
}
void men(){
pnl=(JPanel)getContentPane();
pnl.setLayout(flowLayout);
setSize(new Dimension(400,300));
pnl.add(btn1);
pnl.add(btn2);
this.setVisible(true);
}
void action(){
btn1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
obj=new Timer(5000,this);
obj.start();
System.out.println("aaaaaaaaaaaaaaaa");
}
});
btn2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
obj.stop();//这里的obj为null,为什么我在上面属性区创建了引用,在btn1里面声明,影响不到btn2里面来呢?这个问题如何解决啊?
}
});
}
public static void main(String[] args){
Tim cc=new Tim();
}
}
----------------解决方案--------------------------------------------------------
obj=new Timer(5000,this);
把这句放到Timer obj=new Timer(5000,this);
试一下
----------------解决方案--------------------------------------------------------
不行啊,放上去的话,这个this指的就是这个窗体了,就不是监听器了,这样构造的时候就错了
----------------解决方案--------------------------------------------------------
你在构造函数里面把它构造好
然后点开始就调用它的start
停止就stop就可以了
不要你点start的时候才去构造
----------------解决方案--------------------------------------------------------
试试把obj放到action 这个大方法下面,声明为final的 作用域的问题
----------------解决方案--------------------------------------------------------
[CODE]
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Tim extends JFrame{
JPanel pnl;
JButton btn1=new JButton("开始");
JButton btn2=new JButton("停止");
FlowLayout flowLayout=new FlowLayout();
Class cl;
ActionListener listener=new ActionListener(){
public void actionPerformed(ActionEvent e){
obj.start();
System.out.println("aaaaaaaaaaaaaaaa");
}
};
Timer obj=new Timer(500,listener);
Tim(){
super("Timer");
men();
action();
}
void men(){
pnl=(JPanel)getContentPane();
pnl.setLayout(flowLayout);
setSize(new Dimension(400,300));
pnl.add(btn1);
pnl.add(btn2);
this.setVisible(true);
}
void action(){
btn1.addActionListener(listener);
btn2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
obj.stop();
}
});
}
public static void main(String[] args){
Tim cc=new Tim();
}
}
[/CODE]
----------------解决方案--------------------------------------------------------
谢谢楼上的几位了,改动了一下确实出效果了,又长了不少见识,谢了~
----------------解决方案--------------------------------------------------------
[CODE]
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Tim extends JFrame{
JPanel pnl;
JButton btn1=new JButton("开始");
JButton btn2=new JButton("停止");
FlowLayout flowLayout=new FlowLayout();
Class cl;
ActionListener listener=new ActionListener(){
public void actionPerformed(ActionEvent e){
obj.start();
System.out.println("aaaaaaaaaaaaaaaa");
}
};
Timer obj=new Timer(500,listener);
Tim(){
super("Timer");
men();
action();
}
void men(){
pnl=(JPanel)getContentPane();
pnl.setLayout(flowLayout);
setSize(new Dimension(400,300));
pnl.add(btn1);
pnl.add(btn2);
this.setVisible(true);
}
void action(){
btn1.addActionListener(listener);
btn2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
obj.stop();
}
});
}
public static void main(String[] args){
Tim cc=new Tim();
}
}
[/CODE]
红体部分又是什么新功能哈? 解释下了挖。。
----------------解决方案--------------------------------------------------------
内部类。
----------------解决方案--------------------------------------------------------
类部类是这样写的么?。。。。。。
看到要再去看看了
----------------解决方案--------------------------------------------------------