java学习血泪史
十四.Java Swing
1.窗口
1.JFrame常用方法
JFrame() //创建一个无标题的窗口
JFrame(String a) //创建一个窗体对象,并指定标题
public void setBounts(int a, int b, int width, int heigth) //设置窗口位置和大小
public void setSize(int width,int height) //设置窗体大小
public void setLocation(int x,int y) //设置组件的显示位置
public void setBackgorund(color.red) //设置窗体背景颜色
public void setVisible(boolean b) //设置窗口是否可见,默认为不可见
public void setResizable(boolean b) //设置窗口是否可调整大小,默认为可调整
public void dispose() //撤销当前窗口,并释放当前窗口所使用的所有资源
public void setLocation(point p) //通过point来设置组件的显示位置
public void setVisible(true/false) //显示或隐藏组件
public void add(Component comp) //向容器中增加组件
setLay·out(LayoutManager mgr) //设置局部管理器,如果设置为null表示不使用
public void pack() //调整窗口大小,以适合其子组件的首选大小和局部
public void getContentpane() //返回此窗口的容器对象
public void removeAll() //移除掉容器中的全部组件
public void remove(Component c) //移除掉容器中参数c指定的组件
public void setExtendedState(int state) //设置窗口的扩展状态
public void setDefaultCloseOperation(int operation) //设置单击关闭窗口程序会做怎样的处理
2.菜单条,菜单,菜单项
1.菜单条
setJMenuBar(JMenuBar bar);
2.菜单
JComponent类的子类JMenu负责创建菜单,即JMenu的一个实例就是菜单
3.菜单项
JComponent类的子类JMenuItem负责创建菜单项,即JMenuItem的一个实例就是菜单项
4.嵌入子菜单
JMenu是JMenuItem的子类,因此,菜单项也可以是一个菜单,这样的菜单项是嵌入子菜单
5.菜单上的图标
Icon icon = new ImageIcon(“a.gif”);
6.实例
WindowMenu.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
public class WindowMenu extends JFrame{
JMenuBar menubar; //菜单条
JMenu menu, subMenu; //菜单
JMenuItem item1, item2; //菜单项
public WindowMenu() {}
public WindowMenu(String s, int x, int y, int w, int h){
init(s); //创建一个名为s的带有对应菜单的窗口
setLocation(x, y); //设置位置
setSize(w, h); //设置大小
setVisible(true); //设置成为可见
setDefaultCloseOperation(DISPOSE_ON_CLOSE); //设置点x为释放当前窗口
}
void init(String s){
setTitle(s);
menubar = new JMenuBar(); //创建菜单条
menu = new JMenu("菜单"); //创建菜单
subMenu = new JMenu("子菜单"); //创建子菜单
item1 = new JMenuItem("菜单项1"); //创建菜单项1
item2 = new JMenuItem("菜单项2"); //创建菜单项2
item1.setAccelerator(KeyStroke.getKeyStroke('A')); //给菜单项1设置一个快捷键A
item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK)); //给菜单项2设置一个快捷键ctrl+s
menu.add(item1); //将菜单项1加入到菜单menu中
menu.addSeparator(); //菜单中加入横线分隔符号
menu.add(item2); //将菜单项2加入到菜单中
menu.add(subMenu); //将子菜单加入到菜单中
subMenu.add(new JMenuItem("子菜单里的菜单项")); //创建一个菜单项加入到子菜单中
menubar.add(menu); //将菜单加入到菜单条中
setJMenuBar(menubar); //创建菜单条
}
}
Main.java
public class Main{
public static void main(String args[]){
WindowMenu win = new WindowMenu("带窗口的菜单", 1000,500,200, 190);
}
}
3.常用组件、容器与布局
1.常用组件
1.文本框
使用JTextField类创建文本框,运行用户在文本框中输入单行文字
2.文本区
使用JTexArea类创建文本区,允许用户在文本区输入多行文本
3.按钮
使用JButton类创建按钮,允许用户单击按钮
4.标签
JLable
5.复选框
JCheckBox 为用户提供多种选择
6.单选按钮
7.下拉列表
8.密码框
JPasswordField类
密码框的默认回显字符是 ’ * ’
可以使用setEchoChar(char c)重新设置回显字符
2.常用容器
1.JPanel面板
默认使用FlowLayout布局
2.滚动窗格
一次只能添加一个组件,可以把一个组件放到一个滚动窗格中,然后通过滚动条来观看该组件
3.拆分窗格
水平拆分、垂直拆分
4.分层窗格
如果添加到容器中的组件经常需要处理重叠问题(蜘蛛纸牌),就可以考虑使将组件添加到分层窗格中
3.常用布局
容器可以使用方法 setLayout(布局对象)
一、布局管理器所属类包
所属类包 | 布局管理器名称 | 说明 |
---|---|---|
Java.awt | FlowLayout(流式布局) | 组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一行开始继续排列 |
BorderLayout(边界布局) | 容器划分为东、西、南、北、中五个区域,每个区域只能放置一个组件。 | |
GridLayout(网格布局) | 容器的空间划分成M×N列的网格区域, 每个区域只能放置一个组件。 | |
CardLayout(卡片布局) | 如同一叠牌,每个牌对应一个组件,但每次只能显示其中的一张牌。适用于在一个空间中防止多个组件的情况 | |
GridBagLayout(网格包布局) | GridLayout的升级版,组件仍然是按照行、列放置,但是每个组件可以占据多个网格 | |
Java.swing | BoxLayout(箱式布局) | 允许在容器中纵向或者横向防止多个控件 |
SprigLayout(弹簧布局) | 根据一组约束条件放置控件 | |
无 | 空布局 | 不使用布局管理器,按照控件自身提供的大小、位置信息放置控件 |
二、容器的默认布局管理器
容器 | 默认布局方式 | |
---|---|---|
顶层容器 | JFrame | BorderLayout(边界布局) |
JDialog | BorderLayout(边界布局) | |
JApplet | FlowLayout(流式布局) | |
中间容器 | JPanel | FlowLayout(流式布局) |
三、FlowLayout(流式布局)
使用FlowLayout布局方式的容器中组件按照加入的先后顺序按照设置的对齐方式(居中、左对齐、右对齐)从左向右排列,一行排满(即组件超过容器宽度后)到下一行开始继续排列。
1、流式布局特征如下:
l 组件按照设置的对齐方式进行排列
l 不管对齐方式如何,组件均按照从左到右的方式进行排列,一行排满,转到下一行。(比如按照右对齐排列,第一个组件在第一行最右边,添加第二个组件时,第一个组件向左平移,第二个组件变成该行最右边的组件,这就是从左向右方式进行排列)
2、流式布局FlowLayout类的常用构造函数和方法
构造函数 | |
---|---|
名称 | 用途 |
FlowLayout() | 构造一个新的 FlowLayout,它是默认居中对齐的,默认的水平和垂直间隙是5个像素 |
FlowLayout(int align) | 构造一个新的 FlowLayout,它具有指定的对齐方式,默认的水平和垂直间隙是 5 个像素 五个参数值及含义如下: 0或FlowLayout.lEFT ,控件左对齐 1或FlowLayout.CENTER ,居中对齐 2或FlowLayout.RIGHT ,右对齐 3或FlowLayout.LEADING,控件与容器方向开始边对应 4或FlowLayout.TRAILING,控件与容器方向结束边对应 如果是0、1、2、3、4之外的整数,则为左对齐 |
FlowLayout(int align, int hgap, int vgap) | 创建一个新的流布局管理器,它具有指定的对齐方式以及指定的水平和垂直间隙。 |
方法 | |
---|---|
名称 | 用途 |
Void setAlignment(int align) | 设置此布局的对齐方式。 |
void setHgap(int hgap) | 设置组件之间以及组件与 Container 的边之间的水平间隙。 |
void setVgap(int vgap) | 设置组件之间以及组件与 Container 的边之间的垂直间隙。 |
4. 处理事件
1. 处理事件模式
1. 事件源
2. 监视器
addActionListener(监视器)
3. 处理事件的接口
2. ActionEvent 事件
1. ActionEvent 事件源
- 文本框或密码框 java运行环境自动用ActionEvent类创建一个对象,触发 ActionEvent事件
- 按钮和单选按钮 单击就会触发ActionEvent事件
- 菜单项 选中菜单项,就会触发ActionEvent事件
2. 注册监视器
addActionListener(ActionListener Listen)
3. ActionListener 接口
ActionListener接口在java.awt.event包中,该接口中只有一个方法:
public void actionPerfromed(ActionEvent e)
事件源触发 ActionEvent 事件后,监视器调用接口中的方法 actionPerfromed(ActinEvent e)
对发生的事件做出处理,同时ActionEvent类事先按创建的事件对象就会传递给参数e