java入门了解14

GUI

1.分类:

    一.AWT(Abstract Window Toolkit):抽象窗体工具集

      java.awt.*适合做简单的图像用户界面,复杂的不行,基于底层操作系统,所以不同的操作系统显示的界面不同

    二.Swing:AWT的升级

   javax.swing.*可以跨平台我们一般用的就是他;都是在原来AWT的基础上开发的

所以一般布局界面都是在原来AWT后面开发的

  2.介绍

    一:组成部分:组件库(component class),容器库(container class),帮助库(helper class 主要是描述控件熟悉的)

GUI整体分类

    二:运行原理:javaw.exe用于window中专门执行GUI的

  3.控件使用

    一:container

      JFrame:  

// 创建JFrame
        JFrame frame = new JFrame("我的frame");

        // 创建按钮
        JButton button = new JButton("OK");
        // 向frame中添加一个按钮
        frame.add(button);

        // 设置尺寸
        frame.setSize(200, 100);
        // JFrame在屏幕居中
        frame.setLocationRelativeTo(null);
        // JFrame关闭时的操作
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 显示JFrame
        frame.setVisible(true);

         JOptionPane:对话框

        1.JOptionPane.showMessageDialog(jPanel, "提示消息", "标题",JOptionPane.WARNING_MESSAGE);

                      2.int n = JOptionPane.showConfirmDialog(null, "你高兴吗?", "标题",JOptionPane.YES_NO_OPTION);//i=0/1

      Panel:也是容器类

    二:Comonpent

      JLabel,JButton ,JTextField,JPassworldField,JRadioButton,JCheckBox,JTextArea,JList(列表框),JMenuBar(菜单条),Menu,JMenultem

  三:综合运用的例子

import java.awt.BorderLayout;

import javax.swing.*;

/**
 * 综合应用1
 * @author Administrator
 *
 */
public class test2 extends JFrame {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    public test2(){
        //面板
        JPanel p1=new JPanel();

        JLabel name=new JLabel("用户名:");
        // 文本域
        JTextField field = new JTextField(8);
        // 标签
        JLabel passwd = new JLabel("密码");
        //密码域
        JPasswordField pass=new JPasswordField(8);
        //单选按钮
        JRadioButton male=new JRadioButton("男");
        JRadioButton female=new JRadioButton("女");
        ButtonGroup group=new ButtonGroup();
        group.add(female);group.add(male);
        //复选框
        JLabel like = new JLabel("爱好:");
        JCheckBox eat=new JCheckBox("吃饭");
        JCheckBox sleep=new JCheckBox("睡觉");
        JCheckBox movie=new JCheckBox("看电影");
        //文本框
        JLabel info=new JLabel("简历");
        JTextArea area=new JTextArea(20,20);
        //列表
        String[] data={"one","two","three"};
        JList<String> list=new JList<String>(data);
        //普通按钮
        JButton button=new JButton("注册");
        //菜单条
        JMenuBar bar=new JMenuBar();
        //菜单
        JMenu menu=new JMenu("文件");
        //菜单选项
        JMenuItem item1=new JMenuItem("新建");
        JMenuItem item2=new JMenuItem("保存");
        JMenuItem item3=new JMenuItem("另存为");
        menu.add(item1);menu.add(item2);menu.add(item3);
        bar.add(menu);

        p1.add(name);
        p1.add(field);
        p1.add(passwd);
        p1.add(pass);
        p1.add(male);
        p1.add(female);
        p1.add(like);
        p1.add(eat);

        p1.add(sleep);
        p1.add(field);
        p1.add(movie);
        p1.add(info);
        p1.add(area);
        p1.add(list);
        p1.add(button);
        this.add(bar, BorderLayout.NORTH);//必须要写这个不然就不能显示菜单栏
        add(p1);
    }

    public static void main(String[] args) {
        test2 t=new test2();
        t.setTitle("My JFrame");
        t.setSize(400,400);
        t.setLocationRelativeTo(null);
        t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        t.pack();
        t.setVisible(true);
    }

}

  4.布局管理器

    一:介绍

        java中的GUI都是放在容器中但是容器中的控件是怎么布局的用到的就是布局管理类

    二:分类:

        FlowLayout GridLayout BorderLayout一般通过setLayout()来设置运用哪个布局管理类

    三:具体解释:

        (一)FlowLayout流式布局

          a.有三个常量可以设置组件的对齐方式:LEFT,RIGHT,CENTER

          b.指定组件之间,与Container之间的距离:

            int getHgap(),void setHgap(int hgap)获取设置组件之间以及组件与 Container 的边之间的水平间隙。

            int getVgap(),  void setVgap(int vgap)获取设置组件之间以及组件与 Container 的边之间的垂直间隙。

            默认对齐方式CENTER,水平间距都是5px;

          c.主要的构造函数

            FlowLayout(int align, int hgap, int vgap)创建一个新的流布局管理器,它具有指定的对齐方式以及指定的水平和垂直间隙。

          d.例子

public class ShowFlowLayout extends JFrame {

    public ShowFlowLayout() {
        super.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 20));

        add(new JLabel("姓名:"));
        add(new JTextField(8));
        add(new JLabel("邮箱:"));
        add(new JTextField(8));
        add(new JLabel("电话:"));
        add(new JTextField(8));

    }

    public static void main(String[] args) {
        ShowFlowLayout frame = new ShowFlowLayout();
        frame.setTitle("FlowLayout");
        frame.setSize(500, 200);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

        (二)GridLayout网格布局

          a.按照添加的顺序从左到右

          b.可以指定网格行数列数设置行列间距:

             int getRows(),setRows(int rows)获取设置此布局中的行数。 默认值是1

           int getColumns(),void setColumns(int cols)获取设置此布局中的列数。 默认值是1

               int getHgap(),void setHgap(int hgap)获取设置组件之间的水平间距。 默认值是0

               int getVgap(), void setVgap(int vgap)获取组件之间的垂直间距。默认值是0    

          c.主要构造方法

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

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

            GridLayout(int rows, int cols, int hgap, int vgap)创建具有指定行数和列数,水平间隔,垂直间隔的网格布局。

          d.例子           

public class ShowGridLayout extends JFrame {
    public ShowGridLayout() {
        setLayout(new GridLayout(3, 2, 5, 5));

        add(new JLabel("姓名:"));
        add(new JTextField(8));
        add(new JLabel("邮箱:"));
        add(new JTextField(8));
        add(new JLabel("电话:"));
        add(new JTextField(8));
    }

    public static void main(String[] args) {
        ShowGridLayout frame = new ShowGridLayout();
        frame.setTitle("GridLayout");
        frame.setSize(200, 125);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

          e.注意:

            如果指定一个网格有0行3列10个组件,GirdLayout会创建3个固定的列和行,最后一行只有一个组件.如果指定一个网格有3行0列10个组件,GridLayout就会创建3行4列,最后一行包含2个组件

      (三)BorderLayout边框布局

          a.用法:add(Component,index);

              index是5个常量:EAST(容器左边),WEST(容器右边),SOUTH(下),NORTH(上),CENTER(中间)

          b.方法:设置元素之间的距离

              getVgap();setVgap(int vgap);getHgap();getHgap(int hgap)

          c.构造方法

              BorderLayout(int hgap,int vgap);

          d.例子

public class ShowBorderLayout extends JFrame {
    public ShowBorderLayout() {
        setLayout(new BorderLayout(5, 10));

        add(new JButton("东"), BorderLayout.WEST);
        add(new JButton("西"), BorderLayout.EAST);
        add(new JButton("南"), BorderLayout.SOUTH);
        add(new JButton("北"), BorderLayout.NORTH);
        add(new JButton("中"), BorderLayout.CENTER);
    }

    public static void main(String[] args) {
        ShowBorderLayout frame = new ShowBorderLayout();
        frame.setTitle("BorderLayout");
        frame.setSize(300, 200);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

    四:综合例子:

public class CommonComponent extends JFrame {
    /**
     *
     */
    private static final long serialVersionUID = 1L;

    public CommonComponent() {
        // 菜单条
        JMenuBar bar = new JMenuBar();
        // 菜单
        JMenu menu = new JMenu("文件");
        // 菜单选项
        JMenuItem myNew = new JMenuItem("新建");
        JMenuItem myOpen = new JMenuItem("打开");
        bar.add(menu);
        menu.add(myNew);
        menu.add(myOpen);
        add(bar, BorderLayout.NORTH);

        // 面板
        JPanel p1 = new JPanel();
        p1.setLayout(new GridLayout(2, 2, 5, 5));
        add(p1);

        // 标签
        JLabel name = new JLabel("用户名:");
        p1.add(name);

        // 文本域
        JTextField field = new JTextField(8);
        p1.add(field);

        // 标签
        JLabel passwd = new JLabel("密码");
        p1.add(passwd);
        // 密码域
        JPasswordField pass = new JPasswordField(8);
        p1.add(pass);

        JPanel p2 = new JPanel();
        // 单选按钮
        JLabel gender = new JLabel("性别");
        p2.add(gender);
        JRadioButton male = new JRadioButton("男");
        JRadioButton female = new JRadioButton("女");
        // 单选按钮组,同一个单选按钮组的互斥.
        ButtonGroup group = new ButtonGroup();
        group.add(male);
        group.add(female);
        // 注意,单选按钮组不能添加进容器
        p2.add(male);
        p2.add(female);

        JPanel p3 = new JPanel();
        // 复选框
        JLabel like = new JLabel("爱好:");
        p3.add(like);
        JCheckBox eat = new JCheckBox("吃饭");
        JCheckBox movie = new JCheckBox("看电影");
        JCheckBox sleep = new JCheckBox("睡觉");
        p3.add(eat);
        p3.add(movie);
        p3.add(sleep);

        JPanel p4 = new JPanel(new GridLayout(1, 0, 5, 5));
        // 文本域
        JLabel info = new JLabel("个人简介:");
        p4.add(info);
        JTextArea area = new JTextArea(50, 10);
        p4.add(area);

        JPanel p5 = new JPanel(new BorderLayout());
        // 列表
        String[] data = { "one", "two", "three" };
        JList<String> list = new JList<String>(data);
        p5.add(list, BorderLayout.WEST);

        JPanel p6 = new JPanel();
        // 普通按钮
        JButton button = new JButton("注册");
        p6.add(button);
        JButton button2 = new JButton("取消");
        p6.add(button2);

        setLayout(new GridLayout(7, 1, 5, 5));
        add(p1);
        add(p2);
        add(p3);
        add(p4);
        add(p5);
        add(p6);

    }

    public static void main(String[] args) {
        CommonComponent frame = new CommonComponent();
        frame.setTitle("常用组件");
        frame.setSize(400, 600);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 自适应
        // frame.pack();
        frame.setVisible(true);
    }
}

  5.事件监听

    一:事件类

      根类:java.util.EventObject;getSource()获取事件源对象

      EventObject子类可以描述特定类型的事件如表:

      


用户动作


源对象


触发的事件类型


点击按钮


JButton


ActionEvent


文本域按回车


JTextField


ActionEvent


窗口打开,关闭,最小化,关闭


Window


WindowEvent


单击,双击,移动,鼠标


Component


MouseEvent


点击单选框


JradioButton


ItemEvent ActionEvent


点击复选框


JcheckBox


ItemEvent ActionEvent


鼠标键盘事件


鼠标键盘


MouseEvent(重要)

    事件发生还会有一个监听器(Lister)

    java组件都有事件监听器和添加事件监听器的方法

  二:事件监听器

    (一):用法:给控件添加事件监听器-》创建监听器对象-》重写监听器对象方法actionPerformed获取其他的监听器对象

          (其实这个监听器是一个接口,这里用到的是匿名内部类实现接口的方法)  

//添加事件
        b.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                Object source=e.getSource();
                JButton button=(JButton)source;
                if(button.getText().equals("按钮被点击")){
                    button.setText("点我");
                } else {
                    button.setText("按钮被点击");
                }
            }

        });

  三:适配器类

    (一)出现原因

        因为我们创建监听器对象时就会实现其接口内的所有方法,但是我们有时候只是关注一部分功能,所以就出现了适配器

        实现原理:适配器对象实现了监听器对象的所有方法但都为空方法,我们以后创建自己的监听器对象时就可以用创建这个已经实现接口的适配器对象重写我们关注的那部分功能代码就好


适配器                            接口

WindowAdapter               WindowListener

MouserAdapter  MouserListener

KeyAdapter           KeyListener

    (二)例子:

        class MyAdapter extends WindowAdapter {

          public void windowActivated(WindowEvent e) {

            System.out.println("windowActivated....");

          }

        }  

        鼠标键盘事件

          java.awt.event.MouseEvent;

          java.awt.event.KeyListener接口:用于接收键盘事件(击键)的侦听器接口。

  四:常见的事件监听器

        WindowListener        主要用于监听窗口

        ActionListener          主要用于用监听组件对象的单击动作

        MouseListener          鼠标监听器

        KeyListener               监听键盘

        …….

  五:常见的事件适配器

        WindowAdapter

        MouseAdapter

        KeyAdapter

 

          

时间: 2024-10-15 12:39:15

java入门了解14的相关文章

Java入门——面向对象基础(三)

Java入门——抽象类与接口的应用 本Blog内容 为抽象类与接口实例化 抽象类的实际应用——模板设计 接口的实际应用——制定标准 设计模式——工厂设计 设计模式——代理设计 为抽象类与接口实例化 利用多态性 1 package Sep16; 2 3 public class AbstractCaseDemo1 { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 // TODO Auto-gene

Java入门——多线程(二)

Java入门——多线程(二) 线程的状态 要想实现多线程,必须在主线程中创建新的线程对象.任何线程一般具有5种状态. 创建状态:用构造方法创建一个线程对象之后,新的线程就处于该状态.已经有了相应的内存空间和其他资源和其他资源. 就绪状态:线程进入线程队列排队,等待CPU服务. 运行状态:CPU处理,自动调用run()方法. 阻塞状态:就是在执行过程中暂时挂起.原因有:人为挂起,CPU的决定,sleep(),suspend(),wait()等方法.只有当引起阻塞的原因被消除后,线程才能转入就绪状态

Java 入门课程视频实战-0基础 上线了,猜拳游戏,ATM实战,欢迎围观

Java 入门课程视频实战-0基础 已经上传完了.欢迎小伙伴们过来围观 直接进入: http://edu.csdn.net/course/detail/196 课程文件夹例如以下: 1 初识Java  19:08 2 熟悉Eclipse开发工具  12:42 3 Java语言基础  17:39 4 流程控制  14:53 5 数组  14:44 6 字符串  34:32 7 类和对象  29:30 8 猜拳游戏  33:39 9 模拟银行柜员机程序  36:35 10 退休金结算程序  本课程由

Java入门——面向对象基础(一)

Java入门——面向对象基础(一) 本博客目的 练习题(重要) 面向对象的概念(了解) 面向对象的三大特性(重要) 2016-09-10——13:13:39 ll练习题 用方法调用的形式进行数组排序 1 package Sep10; 2 //调用方法完成两个整形数组的排序并打印 3 public class ArrayRefDemo03 { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 // T

Java入门——异常的捕获与处理

Java入门——异常的捕获与处理 在没有异常处理的语言中,通常需要大量的判断语句,配合所想到的错误来捕获程序中所有可能发生的错误.充分利用Java的异常处理机制,以增进程序的稳定性和效率. Java的异常处理机制 一旦产生异常,则首先会产生一个异常类的实例化对象. 在try语句中对此异常对象进行捕获. 产生的异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码. finaly是异常的统一出口,一定会执行. 所有的子类实例全部可由父类接收,利用向上转型的概念

Java入门到精通——调错篇之Spring2.5利用aspect实现AOP时报错: error at ::0 can&#39;t find referenced pointcut XXX

一.问题描述及原因. 利用Aspect注解实现AOP的时候出现了error at ::0 can't find referenced pointcut XXX.一看我以为注解写错了,结果通过查询相关资料是因为Spring2.5与中的aspectjweaver.jar 和aspectjrt.jar这两个jar包与JDK1.7不匹配. org.springframework.beans.factory.BeanCreationException: Error creating bean with n

Java入门——定时调度

Java入门——定时调度 Timer类 Timer类是一种线程设施,可以用来实现在某一个时间或者某一段时间后安排某一个任务执行一次或者定时重复执行,该功能要与TimeTask配合使用. 每一个Timer对象对应的是一个线程,因此计时器所执行的任务应该迅速完成,否者可能会延迟后续任务的执行. 序号 方法 类型 描述 1 Timer() 构造 创建一个计时器,并且启动这个计时器 2 cancle() 普通 终止该计时器,并放弃所有已经安排的任务 3 purge() 普通 将已经取消的任务移除,一般用

Java 入门课程视频实战-初级 上线了,猜拳游戏,ATM实战,欢迎围观

Java 入门课程视频实战-初级 已经上传完了,欢迎小伙伴们过来围观 直接进入: http://edu.csdn.net/course/detail/196 课程目录如下: 1 初识Java  19:08 2 熟悉Eclipse开发工具  12:42 3 Java语言基础  17:39 4 流程控制  14:53 5 数组  14:44 6 字符串  34:32 7 类和对象  29:30 8 猜拳游戏  33:39 9 模拟银行柜员机程序  36:35 10 退休金结算程序  本课程由 小张网

JAVA入门学习:网站的URL重写

本文来源:http://www.zretc.com/technologyDetail/462.html Java UrlRewrite 的使用实例 URL重写 现在大部分的网站和商城都会使用到URL重写,接触到这个,也是因为正在做的电子商务商城.URL重写,是将原有的URL采用另一种规则来显示,使得用户方便访问同时也屏蔽一些信息. 在此说下它的好处,在开发过程中,经常会遇到一些带了一大堆参数的URL,这样子,一方面显得烦乱,另一方面,一些信息直接显示在URL上,会有些安全性问题.使用URL重写,