GUI 内部类 (Java)

GUI的概念
Swing概述
容器组件
布局管理器
常用组件
事件处理
对话框
内部类

GUI的概念:

到目前为止,我们编写的都是基于控制台输入的程序,操作使用非常不直
观;
GUI(Graphical User Interface)即图形用户界面,是指采用图形方
式显示的用户界面,与早期计算机使用的命令行界面相比,图形界面对
于用户来说在视觉上更易于接受。

swing概述:

swing 是一个为Java设计的GUI工具包javax.swing,该包中包括了图形用户界面

的各种组件支持。
一个 Java 的图形界面,由各种不同类型的“元素”组成,这些“元素”被称为
组件(Component)。
swing中的组件可以分为两大类:容器(如窗口,对话框,面板)和功能组件(如按钮,输
入框,菜单等).
它们的区别主要是在概念上的。因为每个容器也都是组件。
容器是一种可以包含组件的特殊组件
  this.setTitle("欢迎登录");//标题
        this.setSize(400,400);//设置宽高
        //this.setLocation(200,400);//自定义位置
        this.setLocationRelativeTo(null);//水平垂直居中
        this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//关闭窗口时退出程序
        this.setResizable(false);//设置禁止拖拽调整大小

容器组件:

设置字体:

  jLabel1.setFont(new Font("楷体",Font.BOLD,22));//设置字体
        jLabel1.setForeground(new Color(33,11,222));//颜色
        jLabel2.setFont(new Font("楷体",Font.BOLD,22));//设置字体
        jLabel2.setForeground(new Color(33,11,222));//颜色
        jLabel3.setFont(new Font("楷体",Font.BOLD,30));//设置字体
        jLabel3.setForeground(new Color(33,11,222));//颜色

添加面板:

//添加一个面板
        JPanel jPanel = new JPanel(new BorderLayout());//边界布局

添加按钮:

JButton jButton=new JButton("发送");

添加多行文本框:

JTextArea jTextArea1=new JTextArea(30,30);

添加单行文本:

JTextField jTextField=new JTextField(10);

添加多行文本框带滚动条:

 JScrollPane jScrollPane=new JScrollPane(jTextArea);
创建一个空的标签:
 JLabel jLabel1 = new JLabel("账号");

密码框:

JPasswordField jPasswordField = new JPasswordField(22);

事件处理:

对于采用了图形用户界面的程序来说,事件控制是非常重要的;到目前
为止,我们编写的图形用户界面程序都仅仅只是完成了界面,而没有任
何实际的功能,要实现相应的功能,必须进行事件处理;
用户与GUI组件进行交互就会发生事件,如:按下一个按钮、用键盘输
入一个字符、点击鼠标等等;
当前我们要关注的并不是“事件是如何产生的” ,而是讨论当发生事件
后,我们应当“如何处理” 。

添加事件监听器(此处即为匿名类)

 jButton1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
              /*  a.点击登录按钮时,要求账号和密码必须输入,否则提示账号密码不能为空
                b.结合正则表达式验证账号密码只能由数字,字母组成,不满足提示*/
                if(jTextField.getText().length()==0||jPasswordField.getPassword().length==0){
                    JOptionPane.showConfirmDialog(null,"账号密码都不能为空","操作提示",JOptionPane.WARNING_MESSAGE);
                }
                String s=jTextField.getText();
                boolean a=s.matches("\\w*");//任意多的数字,字母
                char[]chars=jPasswordField.getPassword();
                String ss=new String(chars);
                boolean aa=ss.matches("\\w*");//任意多的数字,字母
                if(a==false||aa==false){
                    JOptionPane.showConfirmDialog(null,"账号密码只能由数字,字母组成","操作提示",JOptionPane.WARNING_MESSAGE);
                }
                System.out.println(jTextField.getText());//获得文本输入
                System.out.println(jPasswordField.getPassword());
                new Chat();
                dispose();
            }
        });
JOptionPane 对话框
showMessageDialog() :消息对话框
主要有五种消息类型,类型不同,图标不同:
ERROR_MESSAGE 错误消息提示
INFORMATION_MESSAGE 信息提示
WARNING_MESSAGE 警告提示
QUESTION_MESSAGE 问题提示
PLAIN_MESSAGE 简洁提示
showConfirmDialog() :确认对话框
主要有四种消息类型,类型不同,图标不同:
DEFAULT_OPTION 默认选项
YES_NO_OPTION / 否选项
YES_NO_CANCEL_OPTION / / 取消选项
OK_CANCEL_OPTION 确定 / 取消

什么是内部类

把类定义在另一个类的内部,该类就被称为内部类。
如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类
(或称为嵌套类),而类 Outer 则称为外部类(或称为宿主类)。
内部类 —— 就是位于外部类成员位置的类
特点:可以使用外部类中所有的成员变量和成员方法(包括 private 的)
class Outer {
private int age = 20;
class Inner {
public void show() {
System.out.println(age);
}
}
}

内部类的特点

内部类仍然是一个独立的类,在编译之后内部类会被编译成独立
.class 文件,但是前面冠以外部类的类名和 $ 符号。
内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部
类可以自由地访问外部类的成员变量,无论是否为 private 的。

匿名内部类

匿名内部类是一种特殊的局部内部类,它是通过匿名类实现接口。
new 接口名称/抽象类名称() {
重写抽象方法;
}
在实际开发中,我们常常遇到这样的情况:一个接口/抽象类的方法的某个实现方
式在程序中只会执行一次,但为了使用它,我们需要创建它的实现类。此时可以
使用匿名内部类的方式,可以无需创建新的类,减少代码冗余
public interface IA {
abstract void fun1();
}
new IA() {
@Override
public void fun1() {
System.out.println("匿名类实现fun1");
}
};

内部类的意义

1.封装性
将只有在某个类中使用的功能定义在内部中,并可以使用不同访问权限修饰控制.
2.实现多继承
java是不支持多继承的,多继承有一个致命性的缺陷,
容易出现钻石继承结构

你可能感兴趣的:(java,开发语言)