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

 

          

java入门了解14的更多相关文章

  1. JAVA入门--目录

    在此记录自己的JAVA入门笔记,备忘 JAVA入门[1]--安装JDK JAVA入门[2]-安装Maven JAVA入门[3]—Spring依赖注入 JAVA入门[4]-IntelliJ IDEA配置 ...

  2. Java入门(三):变量和运算符

    上次谈到了Java的基本数据类型,今天接着聊Java的变量.运算符. 一.变量 1.变量的分类 变量分为成员变量.局部变量和常量,其中成员变量又分为实例变量.类变量. 2.变量的定义 语法:变量类型( ...

  3. Java入门(二):注释和基本数据类型

    上次通过eclipse在控制台输出了hello world,是不是有点小激动啊,今天接着介绍Java基础知识. 一.Java注释 1.Java注释语句不会被编译器运行,不用担心代码因为许多注释语句显得 ...

  4. linux环境java入门

    1. 安装java开发环境 安装jre和jdk $ sudo apt-get install default-jre$ sudo apt-get install default-jdk 2. 设置环境 ...

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

    Java 入门课程视频实战-0基础 已经上传完了.欢迎小伙伴们过来围观 直接进入: http://edu.csdn.net/course/detail/196 课程文件夹例如以下: 1 初识Java  ...

  6. Java入门第二季学习总结

    课程总概 该门课程作为java入门学习的第二季,是在有一定的java基础上进行的进一步学习.由于该季涉及到了java的一些核心内容,所以相对第一季来说,课程难度有所提升.大致可将该季的课程分为五部分: ...

  7. Java入门基础(变量、操作符与表达式)

    Java入门基础 1. 第一个程序 2.变量(命名.运算.整数/小数/字符串.布尔类型) 3.操作符与表达式(算术/逻辑/关系/赋值/自增/类型转换操作符) HelloWorld! public cl ...

  8. Java入门(4)

    阅读书目:Java入门经典(第7版) 作者:罗格斯·卡登海德 面向对象编程(OOP)将程序视为对象的集合,确定程序要完成的任务,然后将这些任务指派给最适合完成它们的对象.换言之,计算机程序是一组对象, ...

  9. Java入门(3)

    阅读书目:Java入门经典(第7版) 作者:罗格斯·卡登海德 在程序中使用字符值时,必须用单引号将赋给变量的字符值括起来,对于字符串必须用双引号括起来. int整型-2.14*10^9~2.14*10 ...

随机推荐

  1. ps选框工具全解

    我们每次选择工具的时候,ps上面都会变成特定的选项,比如说下面这些: 比如说选区工具的话就分为新选区.添加选区.交叉选区之类的,这些都是需要在实战中练习的. 不单单是选区有这个工具,其他的也有这个功能 ...

  2. httpd在嵌入式中应用

    在启动脚本合适位置添加: httpd -h /usr/app/www/ 即开始httpd服务,并定位到/usr/app/www/ 注:busybox已支持httpd命令,所以直接用即可. busybo ...

  3. PHP代码中使用post参数上传大文件

    今天连续碰到了两个同事向我反应上传大文件(8M)失败的事情! 都是在PHP代码中通常使用post参数进行上传文件时,当文件的大小大于8M时,上传不能不成功. 首先,我想到了nginx的client_m ...

  4. java中的多线程高并发与负载均衡的用途

    感觉对于这两问题的描述,大家很迷惑把 .下面我就介绍一下: 一; 什么是java的高并发,在什么情况下产生的? 答:如果网站的访问量非常大的话,我们就应该考虑高并发的情况. 高并发的时候就是有很多用户 ...

  5. 【JavaEE】Springmvc+Spring整合及example

    这一篇在前一篇Springmvc的基础上,加上Spring.Spring的主要用途叫做控制反转(依赖注入,IoC/DI)和面向切面的编程(AOP),本文只介绍IoC,因为AOP主要的应用场景是记录日志 ...

  6. IOS下移除按钮默认美化样式

    今天在做项目中发现 ios会自己美化按钮的样式  美化的一般都是加一个圆角 也就是常说的border-radius 属性    今天在弄一个input标签的时候加了一个border-bottom属性  ...

  7. Hadoop学习笔记——Hadoop经常使用命令

    Hadoop下有一些经常使用的命令,通过这些命令能够非常方便操作Hadoop上的文件. 1.查看指定文件夹下的内容 语法: hadoop fs -ls 文件文件夹 2.打开某个已存在的文件 语法: h ...

  8. apple-touch-icon-precomposed 和 apple-touch-icon属性区别

    苹果safari浏览器当中apple-touch-icon-precomposed 和 apple-touch-icon属性是有区别的,之前在网上查了下相关的资料和苹果的开发文档手册,对这两中属性区别 ...

  9. Count(二维树状数组)

    [bzoj1452][JSOI2009]Count Description Input Output Sample Input Sample Output 12   HINT 题解:对于每一个颜色建一 ...

  10. Java基础 - 输出

    输出在各个开发语言中起着至关重要的作用,方便编写代码时进行调试,在java中使用 System.out.println 进行输出 public class Main { public static v ...