内部类与JTable

   什么是内部类

定义: 将一个类定义在一个类或者一个方法里面,这样的类称着内部类  

  内部类的种类

内部类的种类有4种

成员内部类

  成员内部类是最普通的一种内部类,成员内部类可以访问外部类所有的属性和方法。但是外部类要访问成员内部类的属性和方法,必须要先实例化成员内部类。

注意: 成员内部类里面不能包含静态的属性和方法

public class OutClass {
    public void test1() {
    }
    private void test2() {
    }
    private static void test3() {
    }
    class InnerClass {//成员内部类
        private String testStrInner = "";
        private void testInner() {
            test1();
            test2();
            test3();//成员内部类可以访问外部类所有的属性和方法。静态方法直接访问。
        }
    }
}

静态内部类

静态内部类就是在成员内部类多加了一个 static 关键字。静态内部类只能访问外部类的静态成员变量和方法(包括私有静态)

public class OutClass {
    private static String s = "";
    public void test1() {
    }
    private void test2() {
    }
    private static void test3() {
    }
    static class InnerClass {//静态内部类
        private static String testStrInner = "";
        private static void testInner() {
            test3();
            String ss = s;
        }
    }
}

匿名内部类

在new对象的时候给出的类的定义形成了匿名类

匿名类可以继承某类,也可以实现某接口

Swing的消息机制广泛使用匿名类

匿名内部类:顾名思义就是没有名字的类。什么时候用到匿名内部类呢?在Android中最常见得回调监听事件 就是匿名内部类
一般遇到下面这种情况都会考虑到使用匿名内部类:
当一个内部类需要继承或者实现,而且只使用一次的时候,可以考虑使用匿名内部类。调用的时候直接使用父类的无参构造,并重写父类方法。

//父类  Animal 
public class Animal {
    public void bellow() {//动物吼叫的类型
        System.out.println("动物吼叫");
    }
}

如果现在只是需要一个 狗(Dog)的吼叫类型。一般我们会写一个Dog类继承Animal ;然后重写
bellow()方法;最后实例化Dog类,调用bellow()方法。但是此时我们可以使用内部类,因为只用一次,没有其他地方调用,没必要再去写一个class类。

class Demo {
    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.getDogBellow(new Animal(){//匿名内部类,重写父类方法。当然接口也是一样
            @Override
            public void bellow() {
                System.out.println("狗 汪汪汪。。。。");
            }
        });
    }
    public void getDogBellow(Animal animal){
        animal.bellow();
    }
}

局部内部类

局部内部类就是定义在代码块内的一个内部类。比如在方法里面定义一个内部类,就是局部内部类。
局部内部类的作用范围仅仅就在它所在的代码块里。局部内部类不能被public ,protected,private以及static修饰,但是可以被final修饰。

public class Animal {
    public static void bellow() {
        String bellowStr = "动物吼叫";
        System.out.println(bellowStr);
        
        final class Dog {//局部内部类
            String dogBellowStr = bellowStr + ";狗 :汪汪汪";

            public void dogBellow() {
                System.out.println(dogBellowStr);
            }
        }
    }
}

内部类的作用

1、内部类可以很好的实现隐藏。
非内部类是不可以使用 private和 protected修饰的,但是内部类却可以,从而达到隐藏的作用。同时也可以将一定逻辑关系的类组织在一起,增强可读性。
2、间接的实现多继承。
每个内部类都能独立地继承自一个(接口的)实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。所以说内部类间接的实现了多继承。

注入反转

由按钮公布一个守听着接口和一对注册/注册函数

你的代码实现那个接口,将守听者注册在按钮上

一旦按钮被按下,就会反过来调用你的守听者对象的某个函数

JTable

用JTable类可以以表格的形式显示和编辑数据JTable类的对象并不存储数据,它只是数据的表现

JTable 表格组件介绍

data是一个二维数组,包含要显示的信息,heads是一个一维数组,其中的信息是列表头。在程序中使用表格,需要完成的步骤如下:
(1)创建一个JTable对象。
(2)创建一个JScrollPane对象(指定表格及水平和垂直滚动条)。
(3)将表格添加到滚动面板。
(4)将滚动面板添加到JFrame的内容窗格中。

菜单组件介绍

在Swing中,菜单通过JMenuBar、JMenu和JMenultem 实现。

(1)JMenuBar:代表菜单工具栏,可以在其中添加多个Jmenu菜单条。

(2)JMenu:代表菜单条,可以在其中添加多个JMenultem菜单项。

(3)JMenultem:代表菜单项。 高级应用

创建JMenuBar、JMenu和JMenultem 实例都可以直接通过其构造方法实现,构造方法中都含有一个字符串类型参数,该参数用于指定显示在菜单上的标题。例如,创建标题为“文件”的一级菜单条

JMenu jmf=new JMenu(文件(File)");

而创建菜单可以通过setMnemonic()方法设置快捷方式。为“文件”一级菜单设置快捷方式为“F”,并在该字母下添加下划线,

jmf.setMnemonic(“F°);

创建菜单的步骤如下: 
(1)创建菜单工具栏JMenuBaro
(2)创建多个菜单条JMenu。
(3)创建多个菜单项JMenultem。
(4)将菜单添加至对应的菜单条中。
(5)将菜单条添加至菜单工具栏中。
(6)将菜单工具栏加入窗体类JFrame中。

 

posted @ 2022-06-24 11:14  zj勇敢飞,xx永相随  阅读(27)  评论(0编辑  收藏  举报