总共 有5个库 :抽象窗口工具包(Abstract Window Toolkit,AWT)、辅助功能API、2D API、Swing和 对拖放功能的增强支持;
其次 ,介绍 Swing 。Swing 是基于AWT开发的,所以,AWT是Swing的基础。AWT是Java语言开发用户界面程序的基本工具包,Swing 提供大多数轻量级组件的组件集,其中一部分是AWT所缺少的或者可以替代AWT中重量组件的轻量组件。
Swing还提供一个用于实现包含插入式界面样式等特性的图形用户界面的下层构件,使得 Swing组件在不同平台上 都能够 保持组件的界面样式,如双缓冲、调试图形、文本编辑包等;
Swing 提供的组件 是轻量级,但 少量重量组件是必须的,轻量组件是绘制在包含它的容器中,而非绘制在 自己的窗口中,
使用JFrame创建的窗体 分别包含 一个 标题、“最小化”按钮、“最大化”按钮和“关闭”按钮;
JFrame 类中提供一系列的设置窗体的方法;
常见的方法 :
方法名称 | 方法说明 | 返回类型 |
---|---|---|
setTitle (String title) | 设置窗体的标题 | |
setBounds (int x,int y,int width,int height) | 设置窗体的显示位置和大小 | |
setResizable(boolean b) | 设置窗体大小是否可以更改,默认可以更改 | |
setDefaultCloseOperation(int operation) | 设置“关闭”按钮,方法的入口参数从JFrame类提供的静态常量中选择 |
JFrame类中用来设置 “关闭”按钮动作的静态常量
静态常量 | 常量值 | 执行操作 |
---|---|---|
HIDE_ON_CLOSE | 1 | 隐藏窗口,为默认操作 |
DO_NOTHING_ON_CLOSE | 0 | 不执行任何操作 |
DISPOSE_ON_CLOSE | 2 | 移除窗口 |
EXIT_ON_CLOSE | 3 | 退出窗口 |
利用JFrame类创建窗体 时,最后必须通过setVisible(boolean b)方法将窗体设置为可见,在默认情况下窗体不可见,否则看不到 创建的窗体;
'''Java
import javax.swing.JFrame;
public class MyFirstFrame extends JFrame{ //继承窗体类JFrame
public static void main (String args[]){
MyFirstFrame frame = new MyFirstFrame();
frame.setVisible(true); // 设置窗体可见,默认不可见
}
public MyFirstFrame(){
super(); //继承父类的构造方法
setTitle("利用JFrame类创建窗体"); //设置窗体的标题
setBounds(100,100,500,375); //设置窗体的显示位置及大小
getContentPane().setLayout(null); //设置为不采用任何布局管理器
setDefaultOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体关闭按钮的动作为退出
}
}
布局管理器 负责管理组件在容器中的排列方式。Java是跨平台的开发语言,它实现 “一次编写,到处运行”,实现这个目标,Java开发出的程序必须使用布局管理器 管理每个容器的组件布局,
不同平台 (操作系统或其他软硬件平台)显示组件的策略不同,无法确定不同平台的组件大小和样式;
通过 setLayout(LayoutManager mgr)方法 设置组件容器采用的布局管理器;
直接定位 ,牺牲跨平台性能是后果,最好是在单一平台上使用这种方式
getContentPane().setLayout(null);
由FlowLayout类实现的布局管理器被成为 流布局管理器,布局方式是首先在一行上排列组件,当该行没有足够空间是,则回行显示;
流布局管理器 默认为居中显示组件,可以通过FlowLayout类中的setAlignment(int align)方法 设置组件的对齐方式 ,该方法的参数从 FlowLayout类的静态常量中选择
静态常量 | 常量值 | 组件对其方式 |
---|---|---|
LEFT | 0 | 靠左侧显示 |
CENTER | 1 | 居中显示,为默认对齐方式 |
RIGHT | 2 | 靠右侧显示 |
流布局管理器 默认组件的水平间距和垂直间距 均为 5像素,可以通过FlowLayout类的方法 setHgap(int hgap) 和 setVgapint vgap) 设置组件的水平间距和垂直间距;
由 BorderLayout类实现的布局管理器被称为 边界布局管理器,它的布局方式是将容器划分为 5个部分,是JFrame窗体默认的布局管理器;
如果组件 容器采用边界布局管理器,在将组件添加到容器时,需要设置组件的显示位置,通过 方法 add(Component comp,Object constraints)添加并设置,该方法的第一个参数 为欲添加的组件对象,第二个参数为组件的显示对象,可以从BorderLayout类的静态常量中选择;
静态常量 | ||
---|---|---|
CENTER | “Center” | 显示在容器中间 |
NORTH | “North” | 显示在容器顶部 |
SOUTH | “South” | 显示在容器底部 |
WEST | “West” | 显示在容器左侧 |
EAST | “East” | 显示在容器右侧 |
边界布局管理器 默认组件的水平间距和垂直间距是0像素,可以通过BorderLayout类的方法setHgap(int hgap)和 setVgap(int vgap)设置组件的水平间距和垂直间距;
由GridLayout类实现的布局管理器 被称为 网格布局管理器,它的布局方式是将容器按照用户的设置平均划分成若干网格;
在通过构造方法 GridLayout(int rows,int cols)创建 网格布局管理器对象时,参数rows 设置网格的行数,参数cols 设置网格的列数;
在设置时分以下4种情况:
网格布局管理器 默认组件的水平间距和垂直间距均为0像素,可以通过gridLayout类的方法setHgap(int hgap) 和 setVgap(int vgap) 设置组件的水平间距 和垂直间距;
使用面板 ,可以实现对所有组件进行分类管理,即对不同关系的组件采用不同的布局管理方式,使组件的布局更合理,软件界面更美观,面板添加到JFrame窗体中,也可以将子面板添加到上级面板中,然后将组件添加到面板中;
首先 若将所有的组件 都添加到JFrame窗体提供的默认容器中,会出现以下两个问题
一个界面 中的所有组件 只能采用 一种布局方式,美观性差
有些布局方式 管理的组件有限,JFrame窗体默认的BorderLayout布局管理器 ,最多只能管理5个组件;
通过使用JPanel面板可以解决,
首先 ,将面板和组件添加到JFrame窗体中,
然后,再将子面板和组件添加到上级面板中,
这样,就可以向面板中添加无数个组件,而且通过对每个面板采用不同的布局管理器;
JPanel面板默认采用FlowLayout布局管理器
package swing;
/**
* JPanel面板 基本样式
*
* @author hp
*
*/
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.JButton;
public class JPanelDemo01 extends JFrame{
public static void main(String[] args) {
// TODO 自动生成的方法存根
JPanelDemo01 panel01 = new JPanelDemo01();
panel01.setVisible(true);
}
public JPanelDemo01() {
super();
setTitle("计算器");
setResizable(false); //设置窗体大小不可更改
setBounds(100,100,230,230);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel viewPanel = new JPanel(); // 创建显示器面板,默认采用的流布局
getContentPane().add(viewPanel, BorderLayout.NORTH); // 将显示器面板添加到窗体顶部
JTextField textField = new JTextField(); //创建显示器
textField.setEditable(false); //设置显示器不可编辑
textField.setHorizontalAlignment(SwingConstants.RIGHT); //设置文本水平对齐方式
textField.setColumns(18); //设置此文本字段中的列数,参数必须为正整数;
viewPanel.add(textField); //
final JPanel buttonPanel = new JPanel();
final GridLayout gridLayout = new GridLayout(4,0);
gridLayout.setVgap(10);
gridLayout.setHgap(10);
buttonPanel.setLayout(gridLayout); // 按钮面板采用网格布局管理器
getContentPane().add(buttonPanel, BorderLayout.CENTER);
String[][] names = {{"1","2","3","+"},{"4","5","6","-"},{"7","8","9","*"},{".","0","=","/"}};
JButton[][] buttons = new JButton[4][4]; // 创建 按钮数组 元素为按钮
for (int row=0;row<names.length;row++) {
for (int col = 0; col <names.length; col++) {
buttons[row][col]= new JButton(names[row][col]);
buttonPanel.add(buttons[row][col]);
}
}
final JLabel leftLabel = new JLabel(); //创建左侧的占位标签
leftLabel.setPreferredSize(new Dimension(10, 0)); //设置标签的宽度
getContentPane().add(leftLabel, BorderLayout.WEST); //将标签添加到窗体左侧;
final JLabel rightLabel = new JLabel();
rightLabel.setPreferredSize(new Dimension(10,0));
getContentPane().add(rightLabel, BorderLayout.EAST);
}
}
JScrollPane类实现一个带有滚动条的面板,用来为某些组件添加滚动条。例如,在JList 和 LTextArea组件 时均用到该组件
JScrollPane类提供的常用方法:
方法 | 功能 |
---|---|
setViewportView(Component view) | 设置在滚动面板中显示的组件对象 |
setHorizontalScrollBarPolicy(int policy) | 设置水平滚动条的显示策略 |
setVerticalScrollBarPolicy(int policy) | 设置垂直滚动条的显示策略 |
setWhellScrollingEnabled(false) | 设置滚动面板的滚动条是否支持鼠标的滚动轮 |
在设置滚动条显示策略的方法时,参数可以从JScrollPane类中用来设置滚动条显示策略的静态常量中选择
静态常量 | 常量值 | 滚动条的显示策略 |
---|---|---|
HORIZONTAL_SCROLLBAR_AS_NEEDED | 30 | 设置水平滚动条为只在需要时显示,默认策略 |
HORIZONTAL_SCROLLBAR_NEVER | 31 | 设置水平滚动条为永远不显示 |
HORIZONTAL_SCROLLBAR_ALWAYS | 32 | 设置水平滚动条为一直显示 |
VERTICAL_SCROLLBAR_AS_NEEDED | 20 | 设置垂直滚动条为只在需要时显示,默认策略 |
HERTICAL_SCROLLBAR_NEVER | 21 | 设置垂直滚动条为永远不显示 |
HERTICAL_SCROLLBAR_ALWAYS | 22 | 设置垂直滚动条为一直显示 |
软件界面 是软件和用户之间交流的平台,而组件则是绘制软件界面的基本元素,是软件和用户之间的交流要素。
用 文本框 来显示相关信息,用单选按钮、复选框、文本框等接收用户的输入信息,用按钮来提交用户的输入信息
JLabel标签组件 用来显示 文本和图像,可以只显示其中一者,也可以二者同时显示。
JLabel类 提供一系列用来设置标签的方法:
方法 | 功能 |
---|---|
setText(String text) | 设置标签显示的文本 |
setFont(Font font) | 设置标签文本的字体及大小 |
setHorizontalAlignment(int alignment) | 设置文本的显示位置 |
setIcon(Icon icon) | 设置标签显示的图片 |
setHorizontalTextPosition(int textPosition) | 设置文字相对图片在水平方向的显示位置 |
setVerticalTextPosition(int textPositon) | 设置文字相对图片在垂直方向的显示位置 |
JLabel类中用来设置标签内容水平显示位置的静态常量
静态常量 | 常量值 | 标签内容显示位置 |
---|---|---|
LEFT | 2 | 左侧 |
CENTER | 0 | 居中 |
RIGHT | 4 | 右侧 |
JLabel类中用来设置标签文本相对图片在垂直方向显示位置的静态常量
静态常量 | 常量值 | 标签内容显示位置 |
---|---|---|
TOP | 1 | 文字显示在图片上方 |
CENTER | 0 | 文字与图片在垂直方向重叠显示 |
BOTTOM | 3 | 文字显示在图片下方 |
JButton组件是最简单的按钮组件,只是在按下和释放两个状态之间进行切换,可以通过捕获按下并释放的动作执行一些操作,从而完成 和用户的交互。JButton类提供一些系列设置按钮的方法
通过setText(String text)方法 设置按钮的标签文本
final JButton button = new JButton();
button.setBounds(10,10,70,23);
button.setText("确定");
getContentPane().add(button);
通过setIcon(Icon defaultIcon)方法设置按钮在默认状态下显示的图片
通过setRolloverIcon(Icon rolloverIcon)方法设置当光标移动到按钮上方时显示的图片
通过setPressedIcon(Icon pressedIcon)方法设置当按钮被按下时显示的图片
当将按钮设置为显示图片时,建议通过setMargin(Insets m)方法将按钮边框和标签四周的间隔均设置为0.该方法的入口参数为Insets类的实例,Insets类的构造方法 是:Insets(int top,int left,int bottom,int right),接收 4个int型参数,依次为 标签上放、左侧、下方、右侧的间隔;
通过setContentAreaFilled(boolean b)方法设置为不绘制按钮的内容区域,:设置按钮的背景为透明,当设置false时,不绘制,默认绘制
通过setBorderPainted(boolean b)方法设置为不绘制按钮的边框,当设为false时,不绘制,默认绘制
JRadioButton组件实现一个单选按钮,用户可以很方便的查看单选按钮的状态,可以单独使用,也可以与ButtonGroup类联合使用。
单独使用,该单选按钮尅被选定和取消选定,
联合使用,组成单选按钮组,此时用户只能选定按钮组中的一个单选按钮,取消选定由ButtonGroup类自动完成
ButtonGroup类用来创建一个按钮组,按钮组的作用是负责维护该组按钮的“开启”状态,在 按钮组中 只能有一个按钮 处于“开启”状态,
ButtonGroup类提供的常用方法:
方法 | 功能 |
---|---|
add(AbstractButton b) | 添加按钮到按钮组中国 |
remove(AbstractButton b) | 从按钮组中移除按钮 |
getButtonCount() | 返回按钮组中包含按钮个数,返回值为int型 |
getElements() | 返回一个Enumeration 类型的对象,通过该对象 可以遍历按钮组中包含的所有按钮对象 |
JRadioButton类提供一系列用来设置单选按钮的方法
通过setText(String text)方法设置单选按钮的标签文本
**通过setSelected(boolean b)方法设置单选按钮的状态,**默认情况为未选中,当设置为true时,表示单选按钮被选中
JCheckBox组件实现一个复选框,该复选框可以被选定和取消选定,并且可以同时选定多个。用户可以很方便的查看复选框的状态
JCheckBox类提供一系列用来设置复选框的方法,
**通过setSelected(boolean b)方法设置复选框的状态,**默认情况下为未被选中,当设为true时,表示复选框被选中
JComboBox组件实现一个选择框,用户可以从下拉列表中选择相应的值,该选择框还可设置为可编辑的,当设置为可编辑状态时,用户可以在选择框中输入相应的值
在创建选择框时,可以通过构造函数 JComboBox(Object[] items)直接初始化该选择框包含的选项。
例如:创建一个包含“身份证”、“士兵证”、“驾驶证”的选择框,
String[] idCards = {"身份证"、"士兵证"、"驾驶证"};
JComboBox idCardComboBox = new JComboBox(idCards);
可以通过setModel(ComboBoxModel aModel)方法初始化该选择框包含的选项
String[] idCards = {"身份证"、"士兵证"、"驾驶证"};
JComboBox idCardComboBox = new JComboBox();
idCardcomboBox.setModel(new DefaultComboBoxModel(idCardsk));
还可以通过addItem(Object item) 和insertItemAt(Object item,int index)向选择框中添加选项
JComboBox ComboBox = new JComboBox();
comboBox.addItem("士兵证");
comboBox.addItem("驾驶证");
comboBox.insertItemAt("身份证",0);
JComboBox类提供一系列用来设置选择框的方法:
通过setSelectedItem() 或 setSelectedIndex() 设置选择框的默认选项
通过setEditable(boolean b)设置选择框是否可编辑,即选择框是否可以接受用户输入的信息,默认为不可编辑,当设为true时,可编辑
JComboBox类提供的常用方法:
方法 | 功能 |
---|---|
addItem(Object item) | 添加选项到选项列表的尾部 |
insertItemAt(Object item,int index) | 添加选项到选项列表的指定索引位置,索引从0开始 |
removeItem(Object item) | 从选项列表中国移除指定的选项 |
removeItemAt(Object item,int index) | 从选项列表中移除指定索引位置的选项 |
removeAllItems() | 移除选项列表中的所有选项 |
setSelectItem(Object item) | 设置指定选项为选择框的默认选项 |
setSelectIndex(int index) | 设置指定索引位置的选项为选择框的默认选项 |
setMaximumRowCount(int count) | 设置选择框弹出时显示选项的最多行数,默认为8行 |
setEditable(boolean b) | 设置选择框是否可编辑,当设置为true时表示可编辑,默认为不可编辑 |
JList组件 实现 一个列表框,列表框 与选择框的主要区别是 列表框可以多选,而选择框 只能单选 。
在创建 列表框时,需要通过构造函数JList(Object[] list)直接初始化该列表框包含的选项。
创建 一个用来选择月份的选择框,
Integer[] months = {1,2,3,4,5,6,7,8,9,10,11,12};
JList list = new JList(months);
由JList 组件实现 的列表框 有3中选取模式,可以通过 JList类的setSelectionMode(int selectionMode)方法设置具体的选取模式,该方法的参数 可以从ListSelectionMode类中的静态常量中选择 3种选取模式 包括一种单选模式和 两种多选模式
ListSelectionModel类中用来 设置选取模式的静态常量
静态常量 | 常量值 | 标签内容显示位置 |
---|---|---|
SINGLE_SELECTION | 0 | 只允许选择1个 |
SINGLE_INTERVAL_SELECTION | 1 | 只允许连续选取多个 |
MULTIPLE_INTERVAL_SELECTION | 2 | 即允许连续选取,又允许间隔选取 |
JList类提供的常用方法
方法 | 功能 |
---|---|
setSelectedIndex(int index) | 选中指定索引的一个选项 |
setSelectedIndices(int[] indices) | 选中指定索引的一组选项 |
setSelectionBackground(Color selectionBackground) | 设置被选项的背景颜色 |
setSelectionForeground(Color selectionForeground) | 设置被选项的字体颜色 |
getSelectedIndices() | 以int【】形式获得被选中的所有选项的索引值 |
getSeletedValues() | 以Object【】形式获得被选中的所有选项的内容 |
clearSelection() | 取消所有被选中的向 |
isSelectionEmpty() | 查看是否有被选中的项,如有,返回true |
isSelectedIndex(int index) | 查看指定项是否已经被选中 |
ensureIndexIsVisible(int index) | 使指定项在选择窗口中可见 |
setFixedCellHeight(int height) | 设置选择窗口中每个选项的高度 |
setPreferredScrollableViewportSize() | 设置在选择窗口中最多可见选项的个数 |
getPreferredScrollableViewportSize() | 获得使指定个数的选型可见需要的窗口高度 |
setSelectionMode(int selectionMode) | 设置列表框的选择模式,即单选还是多选 |
JTextField组件用来实现一个文本框,接受用户输入的单行文本信息。
若 需要为文本框设置默认文本,可以通过构造函数 JTextField (String text)创建文本框对象
JTextField textField = new JTextField(”请输入姓名“)
也可以通过方法 setText(String str)为文本框设置文本信息
JTextField textField = new JTextField();
textField.setText("请输入姓名");
设置文本框时,可以通过setHorizontalAlignment(int alignment)方法设置文本框内容的水平对齐方式。该方法的入口参数可以从JTextField类中的静态常量中选择。
静态常量 | 常量值 | 标签内容显示位置 |
---|---|---|
LEFT | 2 | 左侧 |
CENTER | 0 | 居中 |
RIGHT | 4 | 右侧 |
JTextField类提供的常用方法
方法 | 功能 |
---|---|
getPreferredSize() | 获得文本框首选大小,返回值为Dimension类型的对象 |
scrollRectToVisible(Rectangle r) | 向左或向右滚动文本框的内容 |
setColumns(int columns) | 设置文本框最多可显示内容的列数 |
setFont(Font font) | 设置文本框的字体 |
setScrollOffset(int scrollOffset) | 设置文本框的滚动偏移量(以像素为单位) |
setHorizontalAlignment(int alignment) | 设置文本框内容的水平对齐方式 |
JPasswordField组件用来实现一个密码框,接收用户输入的单行文本信息,但并不显示用户输入的真实信息,而是通过显示一个指定的回显字符作为占位符,新创建密码框的默认回显字符为 * ,可以通过 setEchoChar(Char c) 方法修改回显字符,
JPasswordField 类提供的常用方法:
方法 | 功能 |
---|---|
setEchoChar(Char c) | 设置回显字符为指定字符 |
getEchoChar() | 获得回显字符,返回值为char型 |
echoCharIsSet() | 查看是否已经设置了回显字符,若设置,则返回true |
getPassword() | 获得用户输入的文本信息,返回值为char型数组 |
final JLabel label = new JLabel();
label.setText("密码:");
label.setBounds(10,10,46,15);
getContentPane().add(label);
JPasswordField passwordField = new JPasswordField();
passwordField.setEchoChar("*");
passwordField.setBounds(62,7,150,21);
getContentPane().add(passwordField);
JTextArea组件实现一个文本域,可以接收用户输入的多行文本,在创建文本域时
通过setLineWrap(boolean wrap)方法设置文本是否自动换行,默认false 不自动换行,
JTextArea类提供的常用方法:
方法 | 功能 |
---|---|
append(String str) | 将指定文本追加到文档结尾 |
insert(String str,int pos) | 将指定文本插入到指定位置 |
replaceRange(String str,int start,int end) | 用给定的新文本替换从指示的起始位置到结尾位置的文本 |
getColumnWidth() | 获取列的宽度 |
getColumns() | 返回文本域中的列数 |
getLineCount() | 确定文本区中包含的行数 |
getPreferredSize() | 返回文本域的首选大小 |
getRows() | 返回文本域中的行数 |
getLineWrap(boolean b) | 设置文本区是否自动换行,默认false |
鼠标事件由MouseEvent类捕获,所有的组件都能产生鼠标事件,可以通过 实现MouseListener接口处理相应的鼠标事件。
MouseListener接口有 5个抽象方法,分别 在光标 移入(出)组件时,鼠标按键被按下(释放)时和发生单击事件时被释放时被触发。
所谓的单击事件 就是按键被按下并释放。需要注意的是:若按键是在 移出组件之后才被释放,则不会触发单击事件
MouseListener接口的具体定义如下:
public interface MouseListener extends EventListener{
public void mouseEntered(MouseEvent e); //光标移入组件时触发
public void mousePressed(MouseEvent e); // 鼠标按键被按下时触发
public void mouseReleasd(MouseEvent e); //鼠标按键被释放时触发
public void mouseClicked(MouseEvent e); //发生单击事件时被触发
public void mouseExited(MouseEvent e); //光标移出组件时被触发
}
MouseEvent类中常用的方法:
方法 | 功能 |
---|---|
getSource() | 用来获得触发此次事件的组件对象,返回值为Object类型 |
getButton() | 用来获得代表触发此次按下,释放或单击事件的按键的inl类型值 |
getClickCount() | 用来获得单击按键的次数 |
MouseEvent类中代表鼠标按键的静态常量
静态常量 | 常量值 | 代表的键 |
---|---|---|
BUTTON1 | 1 | 左键 |
BUTTON2 | 2 | 滚轮 |
BUTTON3 | 3 | 右键 |
转载备注出处即可