zoukankan      html  css  js  c++  java
  • Java图形界面编程

    一:基本概念

      AWT(Abstract Window Toolkit)    

        抽象窗口工具包,SUN 公司提供的用于图形界面编程(GUI)的类库。但是AWT得实现严重依赖于下层操作系统,所以导致组件AWT的外观取决于程序运行的平台。AWT的类和接口都定义在java.awt包中。

      Swing

         Swing组件是实在AWT基础上开发的新型GUI组件,它是纯Java实现的轻量级(light-weight)组件,它不依赖任何特定平台,Swing组件在不同平台具有一致性的表现,但是Swing应用程
    序的界面外观不再和原生应用程序的外观相似。而且消耗太多的内存,这样Swing不适于一些小设备.
        Swing 采用了MVC(模型-视图-控制,Model-View-Controller)设计模式。 

        Swing的视图部分有两个基本元素组成:容器和组件

        组件:独立的可视化控件。常用到的组件:按钮(类JButton)、单选按钮(类JRadioButton)、复选框(类JCheckBox)、组合框(类JComboBox)、列表框(类JList)、文本字段(类JTextField)、纯文本区(类JTextArea)等等。

        容器:是一种设计用来存放其它组件的特殊类型组件。常用到的容器:窗体(JFrame)、对话框(JDialog)、面板(JPanel)、Panel等等。

      布局管理器    

         定义容器中组件摆放位置和大小接口.

        AWT 中的五种布局管理器边界布局管理器(BorderLayout)、流式布局管理器(FlowLayout)、网格布局管理器(GridLayout)、卡片布局管理器(CardLayout)、网格包布局管理器(GridBagLayout).

           窗体(JFrame,JDialog)的默认布局为 BorderLayout(边界布局管理器)

            面板()的默认布局管理器是 FlowLayout(流式布局管理器)

    二:常用类和方法

      JFrame

      JFrame类是一个顶层窗口,也是一个容器,允许将其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。

      常用构造方法:

      •   JFrame():可以创建一个无标题的窗口。
      •   JFrame(String title):创建一个标题为title的窗口
    
    

      常用方法:

      •   getTitle()/setTitle():获取/设置窗口的标题。
      •   getState/setState():获取/设置窗口的最小化、最大化等状态。
      •   isVisible()/setVisible():获取/设置窗口的可视状态(即是否在屏幕上显示)。
      •   getLocation/setLocation():获取/设置窗口在屏幕上应当出现的位置。
      •   getSize()/setSize():获取/设置窗口的大小。
      •   setBounds():获取/设置窗口出现在屏幕上时的初始位置与大小。
      •   setResizable():设置窗口是否可调整大小,窗口默认是可调整大小的。
      •   add():将组件添加到窗口中。
      •   setDefaultCloseOperation() :设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。 

      JTextField

      单行文本框,用来建立文本框的组件,用户可以在文本框中输入单行的文本。

      常用构造方法:

      •   JTextField(int x):创建文本框对象,可以在文本框中输入若干个字符,文本框的可见字符个数由参数x指定。

      •   JTextField(String s):创建文本框对象,则文本框的初始字符串为s,可以在文本框中输入若干个字符。

      常用方法:

      •   public void setText(String text):设置文本框中的文本为参数text指定的文本。
      •   public String getText():获取文本框中的文本。
      •   public void setEditable(boolean b):指定文本框的可编辑性(默认为true-可编辑的)。
      •   public void setHorizontalAlignment(int alignment):设文本在文本框中的对齐方式,其中alignment的有效值确定对齐方式,如:LEFT、CENTER、RIGHT。

      

      JPasswordField

      密码框,用于接收密码信息,输入的文本不会以明文形式显示出来。

      常用方法:

      •   setEchoChar(char echoChar):设置回显字符(默认的回显字符是‘*’)。
      •   char[] getPassword():获取密码框中的密码。

      

      JTextArea

      多行文本框,用户可以在文本区输入多行的文本。

      常用构造方法:

      •   JTextArea(int rows, int columns):构造一个可见行和可见列分别是rows、columns的文本区。

      常用方法:

      •   setLineWrap(boolean b):决定输入的文本能否在文本区的右边界自动换行。
      •   setWrapStyleWord(boolean b):决定是以单词为界(b取true时)或以字符为界(b取false时)进行换行。
      •   getText():获取文本区的文本。
      •   setText(String text):设置文本内容。
      •   append(String text):尾部加文本。
      •   insert(String text,int index):在文本区的指定位置处插入文本。
      •   public void copy():拷贝选定的区域。
      •   public void cut():剪切选定的区域。
      •   public void paste():在指定的区域粘贴。

      JButton

      按钮组件,常用构造方法:

      •   public JButton(String text):创建名字是text的按钮。
      •   public JButton(Icon icon):创建带有图标icon的按钮。
      •   public JButton(String text, Icon icon):创建名字是text且带有图标icon的按钮。

      常用方法:

      •   public String getText():获取当前按钮上的名字。
      •   public void setText(String text):重新设置当前按钮的名字,名字由参数text指定。
      •   public Icon getIcon():获取当前按钮上的图标。
      •   public void setIcon(Icon icon):重新设置当前按钮上的图标。
      •   public void setHorizontalTextPosition(int textPosition):设置按钮名字相对按钮上图标的水平位置。
      •   public void setVerticalTextPosition(int textPosition):设置按钮上名字相对按钮上图标的垂直位置。
      •   public void addActionListener(ActionListener):按钮对象调用该方法可以向按钮增加动作监视器。
      •   public void removeActionListener(ActionListener):按钮对象调用该方法可以移去按钮上的动作监视器。

      JLabel

      标签组件,一般用来显示信息,但没有编辑功能。

      常用构造方法:

      •   public JLabel():创建空标签对象。
      •   public JLabel(String text):创建带文本的标签对象。
      •   public JLabel(String text, int aligment):创建带文本的标签对象,并设置文本对齐方式

      常用方法:

      •   String getText():获取标签的名字。
      •   void setText(String s):设置标签的名字。

      JCheckBox

      复选框,提供两种状态,一种是选中,另一种是未选中,用户通过单击该组件切换状态。如果不对复选框进行初始化设置,默认的初始化设置均为未选中。

      常用构造方法:

      •   public JCheckBox():创建一个没有名字的复选框。
      •   public JCheckBox(String text):创建一个名字是text的复选框。

      常用方法:

      • public void setSelected(boolean b):设置按钮状态--是否选中
      • public boolean isSelected():如果复选框处于选中状态该方法返回true,否则返回false。 

     

    三:事件处理

      事件和事件源:

      事件:当用户在界面上执行一个操作,例如按下键盘、拖动或者单击鼠标时,都将产生一个事件。Java中事件是用来描述不同类型用户操作的对象,Java中有很多不同类型的事件。例如:单击,双击,右击,拖动,键盘的按下、释放,文本域内容改变等。

      事件源:产生事件的组件就是一个事件源。例如,当在一个Button上单击鼠标是,将产生一个ActionEvent类型的事件,而这个Button就是事件源。
     事件驱动模型的三大要素:
      •   事件源:能够接收外部事件的源体。
      •   监听器:能够接收事件源通知的对象。
      •   事件处理程序:用于处理事件的对象。

     

    四:示例代码

      1 import java.awt.GridLayout;
      2 import java.awt.event.ActionEvent;
      3 import java.awt.event.ActionListener;
      4 import javax.swing.JButton;
      5 import javax.swing.JFrame;
      6 import javax.swing.JLabel;
      7 import javax.swing.JOptionPane;
      8 import javax.swing.JPasswordField;
      9 import javax.swing.JTextField;
     10 
     11 /**
     12  * java图形界面编程演示,以登录为例
     13  * 
     14  * @author
     15  *
     16  */
     17 public class LoginFrame extends JFrame implements ActionListener {
     18 
     19     private JTextField username; // 用户名
     20     private JPasswordField password; // 密码
     21     private JButton login; // 登录
     22     private JButton cancel; // 取消
     23 
     24     public LoginFrame(String title) {
     25         setTitle(title);
     26         // 设置大小
     27         setSize(200, 100);
     28         // 设置居中
     29         setLocationRelativeTo(null);
     30         // 退出应用程序
     31         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     32         // 不允许修改窗口大小
     33         setResizable(false);
     34 
     35         // 生成界面
     36         generateInterface();
     37 
     38         // 注册监听器:匿名内部类
     39         // registerListener();
     40 
     41         // 设置窗体可见
     42         setVisible(true);
     43     }
     44 
     45     /**
     46      * 生成界面
     47      */
     48     private void generateInterface() {
     49         username = new JTextField();
     50         password = new JPasswordField();
     51         login = new JButton("登录");
     52 
     53         /* 注册监听器的方式 */
     54 
     55         // 普通类,实现XxxListener接口
     56         // login.addActionListener(new Listener(username, password));
     57 
     58         // 成员内部类,实现XxxListener接口
     59         // login.addActionListener(new Listener()); // 成员内部类
     60 
     61         // 当前类实现XxxListener接口
     62         login.addActionListener(this);
     63 
     64         cancel = new JButton("取消");
     65         cancel.addActionListener(this);
     66 
     67         JLabel uname = new JLabel("用户名:");
     68         JLabel upwd = new JLabel("密 码:");
     69 
     70         setLayout(new GridLayout(3, 2));
     71 
     72         this.add(uname);
     73         this.add(username);
     74         this.add(upwd);
     75         this.add(password);
     76         this.add(login);
     77         this.add(cancel);
     78     }
     79 
     80     /**
     81      * 成员内部类实现ActionListener
     82      * 
     83      * @author
     84      *
     85      */
     86     class Listener implements ActionListener {
     87         @Override
     88         public void actionPerformed(ActionEvent e) {
     89             String uname = username.getText();
     90             String upwd = new String(password.getPassword());
     91             if ("admin".equals(uname) && "123456".equals(upwd)) {
     92                 // 消息框
     93                 JOptionPane.showMessageDialog(null, "登录成功");
     94             } else {
     95                 // 消息框
     96                 JOptionPane.showMessageDialog(null, "用户名或密码错误");
     97             }
     98         }
     99     }
    100 
    101     /**
    102      * 匿名内部类实现ActionListener
    103      */
    104     private void registerListener() {
    105         // 匿名内部类
    106         login.addActionListener(new ActionListener() {
    107             @Override
    108             public void actionPerformed(ActionEvent e) {
    109                 String uname = username.getText();
    110                 String upwd = new String(password.getPassword());
    111                 if ("admin".equals(uname) && "123456".equals(upwd)) {
    112                     // 消息框
    113                     JOptionPane.showMessageDialog(null, "登录成功");
    114                 } else {
    115                     // 消息框
    116                     JOptionPane.showMessageDialog(null, "用户名或密码错误");
    117                 }
    118             }
    119         });
    120     }
    121 
    122     /**
    123      * 本类实现ActionListener
    124      */
    125     @Override
    126     public void actionPerformed(ActionEvent e) {
    127         JButton btn = (JButton) e.getSource();
    128         if ("登录".equals(btn.getText())) {
    129             JOptionPane.showMessageDialog(null, "你点击了登录");
    130         } else {
    131             JOptionPane.showMessageDialog(null, "你点击了取消");
    132         }
    133     }
    134 
    135     public static void main(String[] args) {
    136         LoginFrame frame = new LoginFrame("登录");
    137     }
    138 }
    139 
    140 /**
    141  * 外部类实现ActionListener
    142  * 
    143  * @author
    144  *
    145  */
    146 class Listener implements ActionListener {
    147 
    148     private JTextField username;
    149     private JPasswordField password;
    150 
    151     public Listener(JTextField username, JPasswordField password) {
    152         super();
    153         this.username = username;
    154         this.password = password;
    155     }
    156 
    157     @Override
    158     public void actionPerformed(ActionEvent e) {
    159         String uname = username.getText();
    160         String upwd = new String(password.getPassword());
    161         if ("admin".equals(uname) && "123456".equals(upwd)) {
    162             // 消息框
    163             JOptionPane.showMessageDialog(null, "登录成功");
    164         } else {
    165             // 消息框
    166             JOptionPane.showMessageDialog(null, "用户名或密码错误");
    167         }
    168     }
    169 }
  • 相关阅读:
    洛谷 P5595 【XR-4】歌唱比赛
    洛谷 P5594 【XR-4】模拟赛
    洛谷 AT1350 深さ優先探索
    洛谷 P1449 后缀表达式
    VIJOS-P1064 迎春舞会之数字舞蹈
    洛谷 P3998 [SHOI2013]发微博
    CF306C White, Black and White Again
    CF261E Maxim and Calculator
    JLOI 2014 松鼠的新家
    HNOI 2009 有趣的数列
  • 原文地址:https://www.cnblogs.com/renchang/p/4490489.html
Copyright © 2011-2022 走看看