javaSE(十):GUI

目录

一、GUI的概念

二、 Swing概述

三、容器组件

1.容器组件和功能组件的关系

2.常见容器

四、布局管理器

1)、FlowLayout

 2)、BorderLayout

 3)、GridLayout

五、 常用组件 

1.标签(JLabel)

2.单行文本(JTextField)

3.多行文本框(JTextArea)

 4.按钮(JButton)

5. 菜单栏组件

六、事件处理

七、对话框


一、GUI的概念

● 到目前为止,我们编写的都是基于控制台输入的程序,操作使用非常不直观。

● GUI(Graphical User Interface)即图形用户界面,是指采用图形方式显示的用户界面,与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。

二、 Swing概述

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

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

● swing中的组件可以分为两大类:

   ① 容器组件(如窗口,对话框,面板)

   ② 功能组件(如按钮,输入框,菜单等)

三、容器组件

1.容器组件和功能组件的关系

功能组件不能独立地显示出来,必须将组件放在一定的容器(container)中才可以显示出来。

容器可以容纳多个组件,通过调用容器的add(Component comp)方法向容器中添加组件。

 窗口(JFrame)面板(JPanel)是最常用的两个容器

2.常见容器

JFrame类用来创建窗体,我们的类可以直接继承该类,实现窗体制作

设置窗体的常用方法

void setSize(int width, int height)

void setVisible(boolean b)

void setTitle(String title void setResizable(boolean resizable)

void setLocation(int x,int y)

void setLocationRelativeTo(null);

void setDefaultCloseOperation(int operation)

void dispose()

public class LoginFrame_back1 extends JFrame {

    public LoginFrame_back1(){
       //在构造方法中对创建的窗口特征进行设置
        this.setSize(300, 300);//设置窗口大小
        this.setTitle("欢迎登录");//设置标题
       // this.setLocation(500, 200);//设置窗口位置
        this.setLocationRelativeTo(null);//设置窗口水平垂直居中
        this.setResizable(false);//设置窗口大小不可调整
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项 EXIT_ON_CLOSE关闭窗口时,程序退出运行

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


    public static void main(String[] args) {
        new LoginFrame_back1();
    }
}

  ②JPanel面板,它是轻量级的容器。自己创建Jpanel面板对象,把JPanel作为一个组件添加到窗口或某个面板中。 面板中可以添加其它组件,也可以设置布局,我们一般使用面板来实现布局嵌套。

设置面板的常用方法

void setBackground(Color bg)设置面板的背景色,由参数bg指定颜色

void setLayout(LayoutManager mgr)设置面板的布局,参数是布局管理器

Component add(Component comp)往面板中添加一个组件

public class LoginFrame_back2 extends JFrame {

    public LoginFrame_back2(){
       //在构造方法中对创建的窗口特征进行设置
        this.setSize(300, 300);//设置窗口大小
        this.setTitle("欢迎登录");//设置标题
       // this.setLocation(500, 200);//设置窗口位置
        this.setLocationRelativeTo(null);//设置窗口水平垂直居中
        this.setResizable(false);//设置窗口大小不可调整
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口选项 EXIT_ON_CLOSE关闭窗口时,程序退出运行

        JPanel jPanel = new JPanel();
        //jPanel.setBackground(Color.BLUE);
        jPanel.setBackground(new Color(102,213,191));

        JButton jButton = new JButton("保 存");

        jPanel.add(jButton);
        //把面板添加到窗口上
        this.add(jPanel);
        this.setVisible(true);//让窗口显示,放在设置的最后一行
    }

    public static void main(String[] args) {
        new LoginFrame_back2();
    }
}

四、布局管理器

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

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

● Java中的图形界面在布局管理上采用容器和布局管理相分离的方案,也就是说容器只是把组件放进来,但它不管怎样放置。至于如何放置需要用到布局管理器(Container) 。

Java中有几种常用的布局管理器,分别是:FlowLayout , BorderLayout, GridLayout  

                                                      流式布局 java.awt.FlowLayout

                                                    边界布局 java.awt.BorderLayout

                                                    网格布局 java.awt.GridLayout

1)、FlowLayout

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

this.setLayout(new FlowLayout());

FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行。 不改变组件的大小,按组件原有尺寸显示组件,可设置不同的组件间距,行距以及对齐方式。

构造方法

new FlowLayout(FlowLayout.RIGHT,20,40);右对齐,组件之间水平间距20个像素,垂直间距40 个像素。

new FlowLayout(FlowLayout.LEFT);左对齐,水平和垂直间距为缺省值(5)。

new FlowLayout();使用缺省的居中对齐方式,水平和垂直间距为缺省值(5)。

        /*
          创建面板
          面板可以设置布局管理器
          ①流式布局
           组件在面板上从左到右排列,一行占满重新换行
        */

       // JPanel jPanel = new JPanel(new FlowLayout());//设置流式布局,默认是水平居中 上下左右为5个像素间距
         JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));//设置流式布局,设置组件左对齐 上下左右为5个像素间距
        //JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEFT,20,50));//设置流式布局,设置组件左对齐 水平 垂直间距

          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);
          jPanel.add(jButton2);
          jPanel.add(jButton3);
          jPanel.add(jButton4);
          jPanel.add(jButton5);

        //把面板添加到窗口上
        this.add(jPanel);
        this.setVisible(true);//让窗口显示,放在设置的最后一行

 2)、BorderLayout

BorderLayout布局管理器只允许在容器内放置5个组件,这5个组件的位置是由BorderLayout类中的North、South、East、WestCenter5个常量来确定的,他们对应着容器中的上下左右中,用法如下:

this.add(new Button(“按钮”) ,BorderLayout.NORTH);

this.add(new Button(“按钮”) ,BorderLayout.CENTER);//不可缺少的

this.add(new Button(“按钮”) ,BorderLayout.WEST);

this.add(new Button(“按钮”) ,BorderLayout.SOUTH);

this.add(new Button(“按钮”) ,BorderLayout.EAST);

组件在BorderLayout中的大小都是可以改变的。一般情况下可以让中间区域大一些,而且可以只用其中几个区域。

● BorderLayout将整个容器的布局划分成东(EAST)西(WEST)南(SOUTH)北(NORTH)中 (CENTER)五个区域,组件只能被添加到指定的区域。

● 如不指定组件的加入部位,则默认加入到CENTER区。

● 每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖。

        /*
          创建面板
          面板可以设置布局管理器
          ②边界布局
          共有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);

        //把面板添加到窗口上
        this.add(jPanel);
        this.setVisible(true);//让窗口显示,放在设置的最后一行

 3)、GridLayout

● GridLayout布局管理器是矩形网格,在网格中放置组件,每个网格的高度和宽度都相等,组件随着网格的大小而在水平和垂直方向上拉伸,网格的大小是由容器的大小和创建网格的多少来确定的。其用法如下:

this.setLayout(new GridLayout(2 , 3)); //创建一个2行3列的网格        

this.add(new Button(“按钮”));

● 在 GridLayout 构造方法中指定分割的行数和列数

五、 常用组件 

1.标签(JLabel)

标签是容纳文本和图标的控件,通常用来在界面中标识别的控件。

构造函数: JLabel() 创建一个空的标签

                   JLabel(String text) 创建一个带文本的标签

方法: void setText(String text) 设置标签上的文本

            String getText() 获得标签上的文本

            setFont(new Font(“宋体”,Font.BOLD, 18)); 设置字体

2.单行文本(JTextField)

JTextField的构造函数: JTextField(int columns)

方法: void setText(String text) 设置文本框中的文本

            String getText() 获得文本框中的文本

       //标签组件,可以放文字
        JLabel label = new JLabel("账号");
               //label.setText("密码");
               label.setFont(new Font("楷体", Font.BOLD, 20));//设置字体
       //创建单行文本组件
        JTextField jTextField = new JTextField(15);
                jTextField.getText();

3.多行文本框(JTextArea)

构造函数: JTextArea(int rows, int columns) 创建一个指定行数和列数的空文本域

方法: void setText(String text) 设置文本域中的文本

            String getText() 获得文本域中的文本

            void setFont(Font font) 设置文本域中文本的字体

            void setLineWrap(boolean wrap) //是否自动换行,默认false

如果需要文本区自动出现滚动条,可将文本区对象放入滚动窗格(JScrollPane)中: JScrollPane scrollPane = new JScrollPane(txtArea); add(scrollPane ); 

      //创建文本域(多行多列)
        JTextArea jTextArea = new JTextArea(10, 20);
        jTextArea.setLineWrap(true);//设置内容强制换行
      //带滚动条的面板
        JScrollPane jScrollPane = new JScrollPane(jTextArea);

        JButton jButton = new JButton("保存");
                //jButton.setEnabled(false);//设置按钮是否可用
               jButton.setToolTipText("点击保存");

 4.按钮(JButton)

构造方法: JButton(String text) 创建一个带文本的标签

方法: void setBackground(Color bg) 设置按钮的背景色

         void setEnabled(boolean b) 设置启用(或禁用)按钮,由参数b决定

         void setToolTipText(String text) 设置按钮的悬停提示信息

        JButton jButton = new JButton("保 存");

                jButton.setEnabled(true);
        jPanel.add(jButton);

5. 菜单栏组件

构造方法:JMenuBar();

方法:add(menu); 向菜单栏添加菜单


菜单组件:

构造方法:JMenu(“菜单名称");

方法:add(menuItem); 向菜单添加菜单选项


菜单项组件:

构造方法:JMenuItem(“菜单项名称");

将菜单栏添加到窗口 setJMenuBar(menuBar);

        JMenuBar jMenuBar = new JMenuBar();
        //创建菜单
        JMenu jMenu1 = new JMenu("文件");
        JMenu jMenu2 = new JMenu("编辑");
        JMenu jMenu3 = new JMenu("帮助");

        //创建菜单选项
        JMenuItem jMenuItem1 = new JMenuItem("新建");
        JMenuItem jMenuItem2 = new JMenuItem("保存");
        JMenuItem jMenuItem3 = new JMenuItem("关于我们");

        jMenu1.add( jMenuItem1);
        jMenu1.add( jMenuItem2);
        jMenu3.add( jMenuItem3);

        jMenuBar.add(jMenu1);
        jMenuBar.add(jMenu2);
        jMenuBar.add(jMenu3);

         this.setJMenuBar(jMenuBar);//把菜单栏添加到窗口上

六、事件处理

● 对于采用了图形用户界面的程序来说,事件控制是非常重要的;到目前为止,我们编写的图形用户界面程序都仅仅只是完成了界面,而没有任何实际的功能,要实现相应的功能,必须进行事件处理

● 用户与GUI组件进行交互就会发生事件

如:按下一个按钮、用键盘输入一个字符、点击鼠标等等

● 当前我们要关注的并不是“事件是如何产生的” ,而是讨论当发生事件后,我们应当“如何处理” 

● Java中,事件处理的基本思路如下:

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


案例 !!!

 

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

• 监听器类型是ActionListener


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

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

     // 事件处理   

     @Override   
  
     public void actionPerformed(ActionEvent e) {       

     执行操作    

     }

  });
       //为文本框添加事件的监听
        jTextField.addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent e) {
                System.out.println(jTextField.getText());
            }
        });

        //为事件添加监听 及 事件处理程序
        jMenuItem3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("记事本v1.0");
            }
        });

七、对话框

JOptionPane对话框       

showMessageDialog():消息对话框  主要有五种消息类型,类型不同,图标不同: 

ERROR_MESSAGE                  错误消息提示      

INFORMATION_MESSAGE      信息提示     

 WARNING_MESSAGE             警告提示      

QUESTION_MESSAGE             问题提示      

PLAIN_MESSAGE                     简洁提示

JOptionPane.showMessageDialog(null, "请输入帐号", "提示操作", JOptionPane.WARNING_MESSAGE);

 

showConfirmDialog():确认对话框  主要有四种消息类型,类型不同,图标不同: 

 DEFAULT_OPTION                  默认选项          

YES_NO_OPTION                    是/否选项     

YES_NO_CANCEL_OPTION   是/否/取消选项     

 OK_CANCEL_OPTION            确定/取消

JOptionPane.showConfirmDialog(null, "您确定要退出吗?", "操作提示",JOptionPane.OK_CANCEL_OPTION );

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值