八. GridLayout网格布局管理器
GridLayout将容器分割成许多行和列,组件被填充到每个网格中。添加到容器中的组件首先放置在左上角的网格中,然后
从左到右放置其他组件,直至占满该行的所有网络,接着继续在下一行中从左到右放置组件。特性如下:
. 组件的相对位置不随区域的缩放而改变,但组件的大小会随之改变。组件始终占据网格的整个区域。
. GridLayout总是忽略组件的最佳大小,所有组件的宽度相同,高度也相同。
. 将组件用add()方法添加到容器中的先后顺序决定它们占据哪个网络。GridLayout从左到右、从上到下将组件填充到容器的网格中。
GridLayout的构造方法如下:
GridLayout()
GridLayout(int rows, int cols)
GridLayout(int rows, int cols, int hgap, int vgap)
参数rows代表行数,参数cols代表列数。参数hgap和vgap规定水平(网络之间的水平距离)和垂直方向(网格之间的垂直距离)
的间隙。
九. CardLayout卡片布局管理器
将界面看做一系列的卡片,在任何时侯只有其中一张卡片是可见的,
这张卡片占据容器的整个区域。CardLayout的构造方法:
. CardLayout()
. CardLayout(int hgap, int vgap)
把组件添加到卡片布局的容器中可以指定卡片名字
Panel p = new Panel();
CardLayout c = new CardLayout();
p.setLayout(c);
p.add(new Button("1"),"卡片名");
//显示指定的卡片
c.show(p,"卡片名");
参数hgap表示卡片和容器的左右边界之间的间隙,
参数vgap表示卡片和容器的上下边界的间隙。
卡片布局.next(容器名字) : 显示容器中当前组件之后的一个组件,若当前组件为最后添加的组件,则显示第一个组件,即卡片组件显示是循环的。
卡片布局.first(容器名字)
十. JFC预览
JFC主要是由AWTAbstract Window Toolkit(AWT)、Swing以及Java 2D三者所构成,若将这些一同搭配运用,则用Java程式语言撰写开发成的使用者介面,无论移转、转移到Microsoft WindowsWindows、Mac OS X或Linux等各种不同的作业平台上,都能保有一致性的图像呈现。
前面我们介绍了用AWT创建图形用户界面的基本原理。图形用户界面由各种组件构成,普通组件被添加到容器类组件中,
布局管理器决定如何在容器中放置组件。组件委托事件监听器来响应事件,从而完成与用户的交互。
在java.awt包中,提供了各种具体的组件,如窗体Frame, 面板Panel, 按钮Button等。AWT组件的优点是简单、稳定,兼容
于任何一个JDK版本,缺点是依赖于本地操作系统的GUI, 缺乏平台独立性。每个AWT组件都有一个同位体(peer), 它们位
于java.awt.peer包中, 这些peer负责与本地操作系统进行交互,而本地操作系统负责显示和操作组件。由于AWT组件与本
地平台GUI绑定,因此用AWT组件创建和图形界面在不同的操作系统中会有不同的外观。
为了让用Java创建的图形界面也能够跨平台, 即在不同操作系统中保持相同的外观,从JDK1.2版本开始引入了Swing组件,
这些Swing组件位于javax.swing包中,成为JDK基础类库的一部分。
Swing组件是用纯Java语言编写而成的,不依赖于本地操作系统的GUI, Swing组件可以跨平台运行。独立于本地平台的Swing
组件被称为轻量级组件, 而依赖于本地平台的AWT组件被称为重量级组件。
多数Swing组件的父类为javax.swing.JComponent, 多数Swing组件类都以大写字母"J"开头。除JFrame之外,其余的Swing
组件都继承了JComponent类。
十一. JFrame
每个JFrame都有一个与之关联的内容面板(contentPane), 可以针对这个contentPane设置布局及加入组件。
JFrame jFrame = new JFrame("Hello");
Container contentPane = jFrame.getContentPane();
contentPane.setLayout(new GridLayout(2,1));
contentPane.add(jLabel);
JFrame的setContentPane(Container contentPane)用来重新设置内容面板,因此也可以按以下方式向容器中加入组件。
JFrame jFrame = new JFrame("Hello");
JPanel jPanel = new JPanel();
jPanel.setLayout(new GridLayout(2,1));
jPanel.add(jLabel);
jFrame.setContentPane(jPanel);
JFrame的setDefaultCloseOperation(int operation)方法用来决定如何响应用户关闭窗体的操作,参数operation有以下
可选值:
JFrame.DO_NOTHING_ON_CLOSE: 什么都不做
JFrame.HIDE_ON_CLOSE: 隐藏窗体,这是JFrame的默认选项
JFrame.EXIT_ON_CLOSE: 结束程序
十二.javax.swing.*中的对象是对awt中组件的扩展比JLabel和Label JButton和Button等等
十二.绘制
1.绘制背景图片
2.绘制线条,圆圈等.
十二.模态框
1.普通模态框
//错误提示信息框
//JOptionPane.showMessageDialog(null, "提示信息", "标题", JOptionPane.ERROR_MESSAGE);
//感叹号
//JOptionPane.showMessageDialog(null, "提示信息", "标题", JOptionPane.CANCEL_OPTION);
//没有提示标签
//JOptionPane.showMessageDialog(null, "提示信息", "标题", JOptionPane.CLOSED_OPTION);
2.提示框的图标
BufferedImage qqq = ImageIO.read(new File("src/com/briup/view/test_2_student/ror.png"));
ImageIcon eee = new ImageIcon(qqq);
//给一个提示信息,参数4:模态框的样式,最后一个参数 图标
// 是 0 否 1
//int i = JOptionPane.showConfirmDialog(this, "提示信息", "标题",JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, eee);
3.其他
//一个可以选项卡的提示框//如果单纯是输入框 不要这么多参数
//Object value = JOptionPane.showInputDialog(this, "提示信息", "标题", JOptionPane.YES_OPTION, eee, new String[]{"选项卡一","选项卡二"}, "值");
//内部的提示框
//JOptionPane.showInternalConfirmDialog(dialog, "提示信息", "标题", JOptionPane.YES_NO_OPTION,JOptionPane.INFORMATION_MESSAGE, eee);
// 一个有父级的 提示框:只能在父级container中存在 不能移动出来;
//JOptionPane.showInternalInputDialog(dialog, "消息");
//在某一个父级内 单纯提示
//JOptionPane.showInternalMessageDialog(dialog, "用户名错误");
//JOptionPane.showInternalMessageDialog(dialog, "用户名错误", "标题", JOptionPane.INFORMATION_MESSAGE, eee);
//内部的 模态框 按钮自定义 个数 内容
//JOptionPane.showInternalOptionDialog(dialog, "提示信息", "标题", JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE , eee, new String[]{"选1","选2","选3"}, "你好");
//单纯提示框
//JOptionPane.showMessageDialog(this, "提示信息", "标题", JOptionPane.PLAIN_MESSAGE, eee);
十三.事件监听的三要素
事件源 事件对象 监听器
首先需要给事件源添加一个监听器,然后事件源在某些情况下会产生事件对象,产生事件对象后再调用事件监听器的方法并且把这个产生的事件对象当作参数传过去。
例如:在按钮A上面添加了一个鼠标点击的监听器对象L,然后我们用鼠标点击按钮的时候A,按钮A内部会产生一个鼠标点击事件对象e, 然后就会调用监听器对象L指定的方法,去处理这个鼠标点击事件。