当前位置: 代码迷 >> J2SE >> 使用匿名内部类实现事件处理
  详细解决方案

使用匿名内部类实现事件处理

热度:4   发布时间:2016-04-23 20:32:40.0
求助使用匿名内部类实现事件处理

// frame 里有一个jtextfield 和一个button ,当点击按钮后,实现把编辑框里的内容变为窗口标题
// 问题是在响应方法里如何获取frame这个对象。
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {

}
});

------解决方案--------------------
以下代码可供你参考下:主要是局部内部类如何访问外部类的成员变量、局部变量以及引用外部类本身
1、frame属于某个类的成员变量时

package swing;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class Demo7 {
private JFrame jf=new JFrame("test");
private JButton jb=new JButton("按下");
public void init()
{
jb.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
jf.setTitle("gg");//jf和jb同属于某个类的成员变量,则直接使用其名字jf即可
}
});
jf.add(jb);
jf.pack();
jf.setVisible(true);
}
public static void main(String[] args) {
new Demo7().init();
}
}

2、frame变量同属于某个方法的局部变量时
package swing;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
public class Demo6 {
public static void main(String[] args) {
final JFrame jf=new JFrame("test");
JButton jb=new JButton("按下");
jb.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
jf.setTitle("gg");//jf和jb是同属于某个方法的局部变量,则须将jf声明为final,然后直接使用其名字jf即可
}
});
jf.add(jb);
jf.pack();
jf.setVisible(true);
}

}

3、button属于frame的成员变量时
package swing;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;

public class Demo5 {
public static void main(String[] args) {
JFrame jf=new MyJFrame("test");
jf.pack();
jf.setVisible(true);
}

}

class MyJFrame extends JFrame
{
private JButton jb=new JButton("按下");
public MyJFrame(String str)
{
super(str);
jb.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
MyJFrame.this.setTitle("gg"); //jb属于MyFrame类的成员变量,则通过MyJFrame.this方式引用MyFrame类的当前实例
}
});
this.add(jb);
}
}
  相关解决方案