展开全部
内部类分为四种:
静态e68a8462616964757a686964616f31333337623463内部类(static inner classes)
成员内部类(member inner classes)
局部内部类(local inner classes)
匿名内部类(anonymous inner classes)
所以匿名内部类不是成员内部类.
匿名内部类没有类名,没有class关键字也没有extends和implements等关键字修饰。
匿名内部类会隐式地继承一个父类或实现一个接口。
有些接口实现类,往往就需要用一次, 所以不需要名字,代码显得简洁import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ChangFrameDemo extends JFrame {
JPanel jp1, jp2;//2个JPanel对象
JButton jb1;
boolean flag;//用于判断是打开第1还是第2个JPanel
public ChangFrameDemo() {
jp1 = new JPanel();
jp1.add(new JLabel("信息录入"));
jp1.setBackground(Color.YELLOW);
jp2 = new JPanel();
jp2.add(new JLabel("信息查询"));
jp2.setBackground(Color.LIGHT_GRAY);
jb1 = new JButton("切换内容");
JPanel jp3 = new JPanel();
jp3.add(jb1);
add(jp1);
add(jp3, BorderLayout.SOUTH);
setTitle("切换内容窗口");
setSize(380, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
//第一种写法,写一个类继承于ActionListener 然后实现它的方法
//MyActionListener ma = new MyActionListener();
//jb1.addActionListener(ma);
//下面是第二种方法
jb1.addActionListener(new ActionListener() {//事件响应
@Override
public void actionPerformed(ActionEvent e) {
Container pane = jb1.getRootPane().getContentPane();//得到JFrame的底层Pane
flag = !flag;
if (flag) {
pane.remove(jp1);//删除jp1
pane.add(jp2);//添加jp2
} else {
pane.remove(jp2);
pane.add(jp1);
}
pane.validate();//重构界面
pane.repaint();//重新绘制
}
});
}
public static void main(String[] args) {
new ChangFrameDemo();
}
//第一种写法需要的类
class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
Container pane = jb1.getRootPane().getContentPane();//得到JFrame的底层Pane
flag = !flag;
if (flag) {
pane.remove(jp1);//删除jp1
pane.add(jp2);//添加jp2
} else {
pane.remove(jp2);
pane.add(jp1);
}
pane.validate();//重构界面
pane.repaint();//重新绘制
}
}
}
如果JDK升级到8.0 还支持更简洁的Lambda表达式