关于java:J2SE-II图形技术GUI

39次阅读

共计 5897 个字符,预计需要花费 15 分钟才能阅读完成。

GUI:(Graphical Vser Interface 图形用户接口)是指采纳图形形式显示的计算机操作用户界面。GUI 便捷、精确,实用性很强,次要性能是实现人与计算机等电子设备的人机交互。

Java 为 GUI 提供的对象 java.Awt 和 javax.Swing 两个包中。

1)java.Awt:

Abstract Window ToolKit (形象窗口工具包),须要调用本地零碎办法实现性能。属重量级控件。

2)javax.Swing:

在 AWT 的根底上,建设的一套图形界面零碎,其中提供了更多的组件,而且齐全由 Java 实现。加强了移植性,属轻量级控件。

长处:

(1)swing 领有一个丰盛、便捷的用户界面元素汇合。

(2)swing 对平台的依赖很小,意味着他有很少的对于平台的 bug。

(3)给予用户统一的感觉。给予用户统一的感觉。

继承关系图:

Component:组件

Checkbox:复选框

TextComponen:文本组件,文本框和文本域。

Container:为容器,是一个非凡的组件,该组件中能够通过 add 办法增加其余组件进来。

Button:按钮标签,当按下该按钮时,应用程序能执行某项动作;

Label:是一个可在容器中搁置文本的组件,一个标签只显示一行只读文本;

Checkbox:复选框是一个可处于“开”(true) 或“关”(false) 状态的图形组件。单击复选框可将其状态从“开”更改为“关”,或从“关”更改为“开”;

Frame:是带有题目和边框的顶层窗口;

TextComponent:是所有容许编辑文本的组件的超类;

Window:是一个没有边界和菜单栏的顶层窗口。窗口的默认布局是 BorderLayout;

Panel:面板,是最简略的容器类。应用程序能够将其余组件放在面板提供的空间内,这些组件包含其余面板;

Frame:是带有题目和边框的顶层窗口;

Dialog:对话框,带题目和边界的顶层窗口,边界个别用于从用户处取得某种模式的输出;

FileDialog:文本对话框,用户能够从中抉择文件;


常见的布局管理器:

1)FlowLayout:

流式布局管理器,从左到右的顺序排列,Panel 默认的布局管理器。

构造方法:

① FlowLayout()
结构一个新的 FlowLayout,居中对齐,默认的程度和垂直间隙是 5 个单位。

② FlowLayout(intalign)
结构一个新的 FlowLayout,对齐形式是指定的,默认的程度和垂直间隙是 5 个单位。

③ FlowLayout(intalign, int hgap, int vgap)
创立一个新的流布局管理器,具备指定的对齐形式以及指定的程度和垂直间隙。

2)BorderLayout:

边界布局管理器,东,南,西,北,中,Frame 默认的布局管理器。

结构形式:

① BorderLayout()
结构一个组件之间没有间距的新边界布局。

②BorderLayout(int hgap, int vgap)
用指定的组件之间的程度间距结构一个边界布局。

3)GridLayout:
网格布局管理器,规定的矩阵。

结构形式:

①GridLayout()
创立具备默认值的网格布局,即每个组件占据一行一列。

② GridLayout(int rows, int cols)
创立具备指定行数和列数的网格布局。

③GridLayout(int rows, int cols, int hgap, int vgap)
创立具备指定行数和列数的网格布局,并将程度和垂直间距设置为指定值。

4)CardLayout:
卡片布局管理器,选项卡。

5)GridBagLayout:
网格包布局管理器,非规定的矩阵。

创立图形化界面步骤:

  1. 创立 fame 窗体;
    Frame f = new Frame(“ 窗体名 ”);
  2. 对窗体进行根本设置,例如大小,地位,布局;

    ①调整组件大小:
    void setSize(int width , int height);
    【宽为 width,长为 height】

    ②组建挪动到指定地位:
    void setLocation(int x , int y);

    ③ 设置容器的布局治理:
    voidsetLayout(LayoutManager mgr);

  3. 定义组件;
    例:Button b = new Button(“ 组件名称 ”);
  4. 将组建通过窗体的 add 形式增加到窗体中;
  5. 让窗体显示:void setVisible(boolean b)

    例:

import java.awt.*;

class AwtDemo 
{public static void main(String[] args) 
    {
        // 定义 Frame 对象,并在参数地位传入窗体名
        Frame f = new Frame("我的窗体");
        // 定义窗体大小
        f.setSize(300,300);
        // 设置窗体的地位
        f.setLocation(400,300);
        // 指定布局管理器
        f.setLayout(new FlowLayout());
        // 定义一个按钮组件, 并在参数中传入组件名称
        Button b = new Button("我是按钮");
        // 将组建增加到窗体中
        f.add(b);
        // 让窗体显示
        f.setVisible(true);
    }
}

事件监听机制:

1,事件监听机制的特点:

(1)事件源(组件):就是 awt 包和 swing 包中的那些图形界面组件

(2)事件(Event):每个事件源都有本人特有的对应事件和共性事件。

(3)监听器(Listener):将能够触发某一个事件的动作(不只一个动作)都封装在监听器中。

(4)事件处理:

实现窗体敞开性能实例:

import java.awt.*;
import java.awt.event.*;

class AwtDemo2 
{public static void main(String[] args)
    {
        // 定义 Frame 对象,并在参数地位传入窗体名
        Frame f = new Frame("我的窗体");
        // 定义窗体大小
        f.setSize(300,300);
        // 设置窗体的地位
        f.setLocation(400,300
        // 指定布局管理器
        f.setLayout(new FlowLayout());
        // 定义一个按钮组件, 并在参数中传入组件名称
        Button b = new Button("我是按钮");
        // 将组建增加到窗体中
        f.add(b);
        // 为窗体增加监听器,将适配器作为参数传入构造函数中,定义外部类
        f.addWindowListener(new WindowAdapter()
        {
            // 复写 WindowAdapter 类中的办法,创立本人的事件处理形式
            // 点 X 能够敞开窗口,并输入语句
            public void windowClosing(WindowEvent e)
            {
                // 输入语句
                System.out.println("再见!");
                // 程序完结
                System.exit(0);
            }
            // 激活窗口时显示被激活
            public void windowActivated(WindowEvent e)
            {System.out.println("我激活了!");
            }
            // 窗口一建设就输入信息
            public void windowOpened(WindowEvent e) 
            {System.out.println("你好!");
            }
        });
        // 让窗体显示
        f.setVisible(true);
    }
}

WindowAdapter 中的局部办法展现:

①void windowClosing(WindowEvent e) 窗口正处于敞开过程中调用;
②void windowActivated(WindowEvext e) 激活窗口时调用;
③void windowOpend(WindowEvent e) 关上窗口时调用;

鼠标事件和键盘事件:

import java.awt.*;
import java.awt.event.*;
 
class MouseAndKeyEvent {
    private Frame f;
    private Button but;
    private TextField tf;
    
    MouseAndKeyEvent(){init(); // 初始化 GUI 界面
    }
    
    public void init(){f = new Frame("my frame");
        
        f.setBounds(300,100,600,500); // 挪动窗口到 (300,100) 地位,并调整大小为宽 600 长 500.
        f.setLayout(new FlowLayout());  // 设为流水布局
        f.setVisible(true);   // 显示窗口
        
        but = new Button("退 出"); // 按钮
        tf = new TextField(20);  //20 是这个单行文本框的列数 
        
        f.add(tf);  // 窗口中增加文本框
        f.add(but); // 窗口中增加按钮
        
        myEvent(); // 事件处理}
    
    private void myEvent() { // 事件处理
        // 窗体事件的解决
        f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);
            }
        });
        
        // 按钮的 Action 事件的解决。but.addActionListener(new ActionListener(){  // 匿名外部类
            public void actionPerformed(ActionEvent e){System.out.println("action ok");
            }
        });
        
        // 按钮的鼠标事件。but.addMouseListener(new MouseAdapter(){  // 增加鼠标监听器,匿名外部类。private int count = 1;
            private int clickcount = 1;
            public void mouseEntered(MouseEvent e){ // 鼠标进入 but 按钮的范畴,触发鼠标进入事件。System.out.println("鼠标进入到该组件"+count++);
            }
            public void mouseClicked(MouseEvent e){ // 双击动作
                if(e.getClickCount()==2)
                    System.out.println("鼠标双击击事件"+clickcount++);
            }
        });
        
        // 键盘事件,给 But 增加一个键盘监听,敲键盘则按钮响应。but.addKeyListener(new KeyAdapter(){  // 匿名外部类。public void keyPressed(KeyEvent e){int n = e.getKeyCode();
                String s = e.getKeyText(n);
                System.out.println(s);
                if(s.equals("Enter"))
                    System.out.println("回车键"+"..n:"+n+"..s:"+s);
                if(e.getKeyCode()==KeyEvent.VK_ESCAPE)  // 应用动态常量,"Esc" 键退出。System.exit(0);
            }
        });
        
        // 单行文本框
        tf.addKeyListener(new KeyAdapter(){  // 匿名外部类。public void keyPressed(KeyEvent e){int code = e.getKeyCode();
                if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)){System.out.println("输出不非法");
                    
                    e.consume(); // 不应用默认的形式解决此事件。// 应用了此办法,则键盘敲 'A' 时,字母 'a' 不会再进入文本框。}
            }
        });
    }
    
    public static void main(String[] args){new MouseAndKeyEvent();
    }
}

菜单栏:

Menu:菜单,继承 MenuItem,有右三角的图标存在,可增加 Menu 和 MenuItem;
MenuBar:菜单栏,可增加菜单和菜单条目。个别先创立菜单栏,再创立菜单;
MenuItem:菜单条目,也称菜单项,无右三角的图标存在,是最终的菜单项;

import java.awt.*;
import java.awt.event.*;

class MyMenuDemo {
    private Frame f;  // 窗体
    private MenuBar mb; // 菜单栏
    private Menu m,subMenu; // 菜单
    private MenuItem closeItem,subItem; // 菜单项
    MyMenuDemo(){init(); // 初始化 GUI 界面
    }
    // 初始化
    public void init(){f = new Frame("my window");  // 创立框体
        f.setBounds(300,100,500,600); // 设置大小
        f.setLayout(new FlowLayout()); // 设置布局
        f.setVisible(true); // 显示 Frame 窗体
        mb = new MenuBar(); // 菜单栏
        m = new Menu("文件"); // 菜单栏中的一个菜单 
        subMenu = new Menu("子菜单"); 
        closeItem = new MenuItem("退出"); // 菜单下拉中的一个菜单项 
        subItem = new MenuItem("子条目");
        m.add(closeItem);  // 把菜单项增加到菜单中 
        m.add(subMenu);   // 菜单中增加一个子菜单 
        subMenu.add(subItem);  // 子菜单中增加一个菜单项 
        mb.add(m);        // 把菜单增加到菜单栏中 
        f.setMenuBar(mb); // 将此 Frame 窗体的菜单栏设置为指定的菜单栏 
        myEvent(); // 事件处理}
    public void myEvent(){
        // 窗体监听器,点右上角的 X 号能敞开窗体 
        f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);
            }
        });
        //"退出" 菜单项的监听,实现点击退出
        closeItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);
            }
        });
    }
    public static void main(String[] args){new MyMenuDemo();
    }
}

最初理解一下 GUI 应用领域:手机通信挪动产品,电脑操作平台,软件产品,车载零碎产品,智能家电产品,游戏产品,网页设计等等

谢谢大家浏览,如果想要晓得更多 java 基础知识,能够戳我一起交流学习!

正文完
 0