[JavaSE]GUI编程 图型界面

GUI(Graphical User Interface)
   图形用户界面  -à java 提供的图形用户界面

  UI – 用户界面

Swing 概述
   Javax.swing 包

   此包中包含了java主要的图形界面的实现类

● swing 是一个为Java设计的GUI工具包javax.swing,该包中包括了图形用户界面的各种组件支持。

● 一个 Java 的图形界面,由各种不同类型的“元素”组成,这些“元素”被称为组件(Component)。

● swing中的组件可以分为两大类:容器(如窗口,对话框,面板)和功能组件(如按钮,输入框,菜单等).

● 它们的区别主要是在概念上的。因为每个容器也都是组件。

● 容器是一种可以包含组件的特殊组件。

组件
   容器组件 -- 窗口,面板,对话框 –容器
     JFrame

     JPanel   布局  流式布局   边界布局  网格布局

     对话框  消息对话框  确认对话框  

   功能组件 -- 按钮  输入框  菜单……
      JLable 标签 放文字

      JTextField  单行文本框

      JTextArea  多行文本框

   JScrollPane  滚动面板

   JPasswordField  密码框

   JButton  按钮

   JMenuBar  菜单栏

   JMenu  菜单

   JMenuItem  菜单项

布局管理器
swing中,提供了布局管理器类的对象可以管理

● 每个Jpanel都有一个布局管理器对象, 当容器需要对某个组件进行定位或判断其大小尺寸时 ,就会调用其对应的布局管理器 , 调用Jpanel的setLayout方法改变其布局管理器对象或通过构造方法设置。

1)、FlowLayout (流式布局)
        FlowLayout布局管理器是流式布局管理器,它将组件按照从左到右、从上到下的顺序来安排,并在默认情况下使组件尽量居中放置。

JPanel jPanel = new JPanel(new FlowLayout());

       JButton jButton1 = new JButton("按钮1");//创建一个按钮组件
       JButton jButton2 = new JButton("按钮2");


       jPanel.add(jButton1);//向面板上添加其他组件
       jPanel.add(jButton2);

//把面板添加到窗口上
this.add(jPanel);

this.setVisible(true);//让窗口显示  放在设置的最后一行

 

 

2)BorderLayout (边界布局)
  总共有5个区域,每个区域可以防止一个组件,并且占满整个区域

  中间区域是必须的,其他几个区域可以根据需要使用

  添加组件式,可以指定组件的位置,如果不指定,默认添加到中间区域

JPanel jPanel = new JPanel(new BorderLayout());


       JButton jButton1 = new JButton("按钮1");//创建一个按钮组件
       JButton jButton2 = new JButton("按钮2");
JButton jButton3 = new JButton("按钮3");
JButton jButton4 = new JButton("按钮4");
JButton jButton5 = new JButton("按钮5");


       jPanel.add(jButton1,BorderLayout.NORTH);//向面板上添加其他组件
       jPanel.add(jButton2,BorderLayout.SOUTH);
jPanel.add(jButton3,BorderLayout.WEST);
jPanel.add(jButton4,BorderLayout.EAST);
jPanel.add(jButton5,BorderLayout.CENTER);

 

3)GridLayou (网格布局)
网格就类似一个表格,可以设置行数和列数,

每个网格中只能放一个组件,占满整个区域

从第一行开始摆放,第一行占满后,再开启第二行

JPanel jPanel = new JPanel(new GridLayout(2,3));


       JButton jButton1 = new JButton("按钮1");//创建一个按钮组件
       JButton jButton2 = new JButton("按钮2");
JButton jButton3 = new JButton("按钮3");
JButton jButton4 = new JButton("按钮4");
JButton jButton5 = new JButton("按钮5");
JButton jButton6 = new JButton("按钮6");

jPanel.add(jButton1);
jPanel.add(jButton2);
jPanel.add(jButton3);
jPanel.add(jButton4);
jPanel.add(jButton5);
jPanel.add(jButton6);

 

事件处理

 在java中,事件处理的基本思路如下:

  一个事件源产生一个事件并把它送到监听器那里,监听器一直等待,直到它收到一个事件,一旦事件被接受,监听器将处理这些事件。

例如:

 

• 由于我们想要处理按钮的点击事件,因此,按钮便是事件源;

• 监听器类型是ActionListener。

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

按钮对象.addActionListener(new ActionListener() {

            // 事件处理

          @Override public void actionPerformed(ActionEvent e) {

       执行操作

}

});

对话框
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        确定/取消

举例:

loginButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        String account = accountTextField.getText();
        String password = new String(passwordField.getPassword());
        System.out.println(account);
        System.out.println(password);

        if (account.length() == 0){
            JOptionPane.showMessageDialog(null, "账号不能为空,请重新输入!",
                    "系统提示!",JOptionPane.WARNING_MESSAGE);
            return;
        }
        if (password.length() == 0){
            JOptionPane.showMessageDialog(null,"密码不能为空!");
            return;
        }
        String pattern = "^\\w+$";

        boolean flag =  Pattern.matches(pattern,password) && Pattern.matches(pattern,account);
        if (!flag){
            JOptionPane.showMessageDialog(null,"账号密码只能由数字、字母组成!请重新输入!");
            return;
        }
        new Chat();
        dispose();//关闭登录界面
    }
});

 

内部类
● 把类定义在另一个类的内部,该类就被称为内部类。

● 如果在类 Outer 的内部再定义一个类 Inner,此时类Inner 就称为内部类(或称为嵌套类),而类 Outer 则称为外部类(或称为宿主类)。

内部类的特点
● 内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。

● 内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否为private的。

匿名内部类
匿名内部类是一种特殊的局部内部类,它是通过匿名类实现接口。

     new 接口名称/抽象类名称() { 

    重写抽象方法;

}

在实际开发中,我们常常遇到这样的情况:一个接口/抽象类的方法的某个实现方式在程序中只会执行一次,但为了使用它,我们需要创建它的实现类。此时可以使用匿名内部类的方式,可以无需创建新的类,减少代码冗余。

内部类的意义
1.封装性

将只有在某个类中使用的功能定义在内部中,并可以使用不同访问权限修饰控制.

2.实现多继承 java是不支持多继承的,多继承有一个致命性的缺陷, 容易出现钻石继承结构。例如下图:

 

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值