SWING里面的事件处理方式!
比如说:JButtonbtn=newJButton("按钮");ButtonListenerbl=newButtonListener();theme.addActionL...
比如说:
JButton btn = new JButton("按钮");
ButtonListener bl = new ButtonListener();
theme.addActionListener(bl);
后面有:
class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Object obj = e.getSource();
if (obj == btn) {
System.out.println("click");
}
}
}
如果ButtonListener写在最外层类的内部类(JFrame是最外层的),那么ButtonListener 只能访问类的成员变量。
而实际情况很多的JButton,Jtable是方法里的局部变量,所以ButtonListener只能写成方法中的内部类,
类似这样:
public void method(){
class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Object obj = e.getSource();
if (obj == btn) {
System.out.println("click");
}
}
}
JButton btn = new JButton("按钮");
ButtonListener bl = new ButtonListener();
btn.addActionListener(bl);
}
但是这样出现了一个矛盾,如果Listener写在ButtonListener bl = new ButtonListener();btn.addActionListener(bl);之前,会报找不到btn的错误,
如果Listener写在ButtonListener bl = new ButtonListener();btn.addActionListener(bl);之后,回报找不到ButtonListener的错误。
所以现在有2中解决方法,一个是把所有需要相应事件的组件都写成成员变量,另一个是每一个监听器都写成匿名内部类。
第二种方法显然不好,重复的代码太多了。
大家有没有好的解决办法?
if(obj.equals(button1)) button1必须是成员变量,很多时候他们不是成员变量啊。 展开
JButton btn = new JButton("按钮");
ButtonListener bl = new ButtonListener();
theme.addActionListener(bl);
后面有:
class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Object obj = e.getSource();
if (obj == btn) {
System.out.println("click");
}
}
}
如果ButtonListener写在最外层类的内部类(JFrame是最外层的),那么ButtonListener 只能访问类的成员变量。
而实际情况很多的JButton,Jtable是方法里的局部变量,所以ButtonListener只能写成方法中的内部类,
类似这样:
public void method(){
class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Object obj = e.getSource();
if (obj == btn) {
System.out.println("click");
}
}
}
JButton btn = new JButton("按钮");
ButtonListener bl = new ButtonListener();
btn.addActionListener(bl);
}
但是这样出现了一个矛盾,如果Listener写在ButtonListener bl = new ButtonListener();btn.addActionListener(bl);之前,会报找不到btn的错误,
如果Listener写在ButtonListener bl = new ButtonListener();btn.addActionListener(bl);之后,回报找不到ButtonListener的错误。
所以现在有2中解决方法,一个是把所有需要相应事件的组件都写成成员变量,另一个是每一个监听器都写成匿名内部类。
第二种方法显然不好,重复的代码太多了。
大家有没有好的解决办法?
if(obj.equals(button1)) button1必须是成员变量,很多时候他们不是成员变量啊。 展开
1个回答
展开全部
在主类上实现ActionListener接口,然后在接口方法中这样写:
public void actionPerformed(ActionEvent e)
{
Object obj = e.getSource() ;
if(obj.equals(button1)){
doButton1Action() ;
} else if(obj.equals(button2)){
doButton2Action() ;
} else if(obj.equals(button3)){
doButton3Action() ;
} else if(obj.equals(button4)){
doButton4ction() ;
} else if(obj.equals(button5)){
doButton5Action() ;
}
}
public void actionPerformed(ActionEvent e)
{
Object obj = e.getSource() ;
if(obj.equals(button1)){
doButton1Action() ;
} else if(obj.equals(button2)){
doButton2Action() ;
} else if(obj.equals(button3)){
doButton3Action() ;
} else if(obj.equals(button4)){
doButton4ction() ;
} else if(obj.equals(button5)){
doButton5Action() ;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询