黑马程序员---GUI编程
2013-12-04 22:54
531 查看
GUI
---------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
1.图形用户界面基本概念
1.1 GUI与CLI的比较
1.2 AWT和Swing
Java为GUI提供的对象都存放在java.awt.*和javax.swing.*两个包中。
1.2.1 两者的比较
关于Component构件的详细关系如下图所示:
Container:为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来而Container类有两个最重要的子类,分别是java.awt.Window 与java.awt.Frame,除了以往的AWT组件会继承这两个类外,现在的Swing组件同样也扩展了这两个类。
1.2.2 Swing的常用组件
2.常用布局管理器
Swing提供的常用布局管理器包括流布局管理器、边界布局管理器和网格布局管理器。除了使用布局管理器之处也可以使用。
2.1 绝对布局管理器
绝对布局 就是 硬性规定组件在容器中的位置和大小,可以使用绝对坐标来指定组件的位置。使用绝对布局的步骤如下:
1)使用Container.setLayout(null) 方法取消布局管理器。
2)使用Component.setBounds()方法设置每个组件的大小与位置。
如下代码:
package com.ping.JFrame; import java.awt.*; import javax.swing.*; public class AbsolutePosition extends JFrame { public AbsolutePosition() { setTitle("本窗体使用绝对布局"); // 设置该窗体的标题 setLayout(null); // 使该窗体取消布局管理器设置 setBounds(0, 0, 200, 150); // 绝对定位窗体的位置与大小 Container c = getContentPane(); // 创建容器对象 JButton b1 = new JButton("按钮1"); // 创建按钮 JButton b2 = new JButton("按钮2"); // 创建按钮 b1.setBounds(10, 30, 80, 30); // 设置按钮的位置与大小 b2.setBounds(60, 70, 100, 20); c.add(b1); // 将按钮添加到容器中 c.add(b2); setVisible(true); // 使窗体可见 // 设置窗体关闭方式 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new AbsolutePosition(); } }
效果图:
绝对布局使用了SetBounds(intx , int y , int width , int height)方法进行设置,其中x、y分别代表这个窗体在整个屏幕上出现的位置,width与height则代表了这个窗体的的宽与长,如果是组件使用这个方法的话,参数x、y代表了这个组件在整个窗体摆放的位置,而width与height则代表这个组件的大小。而setLayout(null)则是告诉编译这里不同使用布局管理器了。
2.2 常用布局管理器
如果没有为容器指定布局管理器,则该容器使用默认的布局管理器。为容器指定布局管理器可以调用容器对象的setLayout(LayoutManager mgr)方法来完成,其中参数mgr为指定的布局管理器。一共有五种布局管理器,
下面分别用代码看看其有什么差别:
2.2.1 流式布局管理器
定义:像“流”一样从左到右摆放组件,直到占据这一行的所有空间,然后再向下移动。import java.awt.*; import javax.swing.*; public class FlowLayoutPosition extends JFrame { public FlowLayoutPosition() { setTitle("本窗体使用流布局管理器"); // 设置窗体标题 Container c = getContentPane(); // 设置窗体使用流布局管理器,使组件右对齐,并且设置组件之间的水平间隔与垂直间隔 setLayout(new FlowLayout(2, 10, 10)); for (int i = 0; i < 10; i++) { // 在容器中循环添加10个按钮 c.add(new JButton("button" + i)); } setSize(300, 200); // 设置窗体大小 setVisible(true); // 设置窗体可见 // 设置窗体关闭方式 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); } public static void main(String[] args) { new FlowLayoutPosition(); } }效果图:
2.2.2 边界布局管理器
定义:可将容器分为东、南、西、北、中5个区域,可以将组件加入这5个区域。用BorderLayout类中的成员变量来决定。如下图:
具体设置如下代码
package com.ping.JFrame; import java.awt.BorderLayout; import java.awt.Container; import javax.swing.*; public class BorderLayoutPosition extends JFrame { // 定义组件摆放位置的数组 String[] border = { BorderLayout.CENTER, BorderLayout.NORTH, BorderLayout.SOUTH, BorderLayout.WEST, BorderLayout.EAST }; String[] buttonName = { "center button", "north button", "south button", "west button", "east button" }; public BorderLayoutPosition() { setTitle("这个窗体使用边界布局管理器"); Container c = getContentPane(); // 定义一个容器 setLayout(new BorderLayout()); // 设置容器为边界布局管理器 for (int i = 0; i < border.length; i++) { // 在容器中添加按钮,并设置按钮布局 c.add(border[i], new JButton(buttonName[i])); } setSize(350, 200); // 设置窗体大小 setVisible(true); // 使窗体可视 // 设置窗体关闭方式 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); } public static void main(String[] args) { new BorderLayoutPosition(); } }效果图:
2.2.3 网格布局管理器
定义:将容器划分为网络,组件从网络的左上角开始,按照从左到右的、从上到下的顺序加入网格。网格布局管理器主要用两种方式设置其网格分布。
示例代码:
import java.awt.*; import javax.swing.*; public class GridLayoutPosition extends JFrame { public GridLayoutPosition() { Container c = getContentPane(); // 设置容器使用网格布局管理器,设置7行3列的网格 setLayout(new GridLayout(7, 3, 5, 5)); for (int i = 0; i < 20; i++) { c.add(new JButton("button" + i)); // 循环添加按钮 } setSize(300, 300); setTitle("这是一个使用网格布局管理器的窗体"); setVisible(true); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { new GridLayoutPosition(); } }效果图:
剩下的两种布局就不再具体赘述了。
3.常用窗体
窗体作为Swing应用程序中组件的承载体,处于非常重要的位置。 Swing常用的窗体包括JFrame和JDialog。3.1 JFrame窗体
JFramep窗体是一个容器,它是Swing程序中各个组件的载体,是Swing各个组件的容器。可以通过继承java.swing.JFrame类创建一个窗体,在这些窗体中添加组件,并设置事件。因为这些窗体继承了JFrame类,所以它拥有最大化,最小化、关闭等功能。JFrame在程序中的实现格式如下:
JFrame jf = new JFrame(title);
Container container = jf.getContentPane();
由上构建方法可知,Swing组件通常与组件和容器有关,所以在JFrame对象创建后,需要调用getContentPane()方法将窗体转换为容器,然后在容器中添加组件或设置布局管理器。若想将组件加至容器,可用Container类的add()方法进行设置。
新建一个窗体:如下代码
import java.awt.*; import javax.swing.*; // 自定义一个类继承JFrame类 public class MyJFrame extends JFrame { // 定义一个CreateJFrame()方法 public void CreateJFrame(String title) { // 实例化一个JFrame对象 JFrame jf = new JFrame(title); // 获取一个容器 Container container = jf.getContentPane(); // 创建一个JLabel标签 JLabel jl = new JLabel("这是一个JFrame窗体"); // 使标签上的文字居中 jl.setHorizontalAlignment(SwingConstants.CENTER); // 将标签添加到容器中 container.add(jl); //设置容器的背景颜色 container.setBackground(Color.white); // 使窗体可视 jf.setVisible(true); // 设置窗体大小 jf.setSize(200, 150); // 设置窗体关闭方式 jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String args[]){ //在主方法中调用createJFrame()方法 new MyJFrame().CreateJFrame("创建一个JFrame窗体"); } }效果图:
3.2 JDialog窗体
定义:JDialog窗体是Swing组件中的对话框,它继承了AWT组件中java.awt.Dialog类。特点:
1)JDialog窗体的功能是从一个窗体中弹出另一个窗体,就像是在使用IE浏览器时弹出的确定对话框一样。
2)JDialog窗体实质就是另一种类型的窗体。
3)创建JDialog窗体时,也需要调用ContentPane()方法将窗体转换为容器。
构造方法:
练习:在项目中创建MyJDialog类,该类继承JDialog窗体,并在窗体中添加按钮,当用户单击按钮时,将弹出一个对话框。
import java.awt.*; import java.awt.event.*; import javax.swing.*; class MyJDialog extends JDialog { // 创建新类继承JDialog类 public MyJDialog(MyFrame frame) { // 实例化一个JDialog类对象,指定对话框的父窗体、窗体标题和类型 super(frame, "第一个JDialog窗体", true); // 创建一个容器 Container container = getContentPane(); // 在容器中添加标签 container.add(new JLabel("这是一个对话框")); // 设置对话框窗体大小 setBounds(120, 120, 100, 100); } } public class MyFrame extends JFrame { // 创建新类 public static void main(String args[]) { // 实例化MyJDialog类对象 new MyFrame(); } public MyFrame() { // 创建一个容器 Container container = getContentPane(); container.setLayout(null); // 在窗体中设置标签 JLabel jl = new JLabel("这是一个JFrame窗体"); // 将标签的文字置于标签中间位置 jl.setHorizontalAlignment(SwingConstants.CENTER); container.add(jl); // 定义一个按钮 JButton bl = new JButton("弹出对话框"); bl.setBounds(10, 10, 100, 21); // 为按钮添加鼠标单击事件 bl.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 使MyJDialog窗体可见 new MyJDialog(MyFrame.this).setVisible(true); } }); // 将按钮添加到容器中 container.add(bl); container.add(bl); container.setBackground(Color.white); setSize(200, 200); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); setVisible(true); } }效果图:
4.事件处理
4.1事件监听机制
事件监听机制的组成由:1)事件 ---用户对组件的一个操作
2)事件源 ---发生事件的组件
3)监听器 ---需要处理的某个事件,在发生事件的组件上添加监听器
4)事件处理器---监听器中的方法,监听器被添加在组件上之后,组件上发生了对应时间就会执行指定的方法
4.2 事件监听流程
4.2.1 事件监听器流程图
4.2.2 事件监听机制实现的步骤
(1)确定事件源(容器或组件);(2)通过事件源对戏那个的addXXXListener()方法将侦听器注册到该事件源上;
(3)该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象;
(4)一般使用匿名内部类来表示;
(5)在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收;
(6)事件触发后会把事件打包成对象传递给该变量(其中包括事件源对象。通过getSource()或者,getComponent()获取。)
4.3 常用的事件监听器
上图中重要事件的说明如下表所示:4.4 动作事件监听器
动作事件(ActionEvent)监听器是Swing中比较常见的事件监听器,常用于点击按钮等操作。下面将使用按钮事件来说明动作事件监听器,当用户点击按钮时,将触发事件
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class SimpleEvent extends JFrame{ private JButton jb=new JButton("我是按钮,单击我"); public SimpleEvent(){ setLayout(null); setSize(200,100); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); Container cp=getContentPane(); cp.add(jb); jb.setBounds(10, 10,100,30); jb.addActionListener(new jbAction()); setVisible(true); } class jbAction implements ActionListener{ public void actionPerformed(ActionEvent arg0) { jb.setText("我被单击了"); } } public static void main(String[] args) { new SimpleEvent(); } }效果图:
----------- android培训、java培训、java学习型技术博客期待与您交流! ------------
相关文章推荐
- 黑马程序员__GUI_网络编程
- 黑马程序员——GUI与网络编程
- 黑马程序员----GUI编程和网络编程
- 黑马程序员_客户端聊天软件(网络编程、GUI、线程等)
- 黑马程序员——Java基础——GUI图形界面编程
- 黑马程序员--GUI编程
- 黑马程序员—JAVA基础—GUI(图形化界面编程)
- 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式
- 黑马程序员——GUI编程
- 黑马程序员 java基础24天 GUI编程学习总结
- 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式
- 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式
- 黑马程序员_GUI编程n种方法实现两个数相加
- 黑马程序员──GUI、网络编程、正则
- 黑马程序员--Java学习日记之GUI(图形化用户界面编程)
- 黑马程序员--GUI界面编程--java学习日记9(基础知识)
- 黑马程序员_Java GUI编程
- 黑马程序员——基础学习(十四)多线程(Thread)和图形界面编程(GUI)
- 黑马程序员__Java GUI编程
- 黑马程序员—java基础—GUI图形用户界面编程