AWT(调用本地GUI实现, c或c++编写,性能略好)
Swing(纯java实现,是awt的升级,样式略好)
1 Container容器
注释:中间容器Panel,ScrollPane依附于容器Frame,Frame直接添加控件会覆盖之前添加控件,需要通过中间容器添加多个控件。
自定义容器:需要继承Frame或Jframe。
获取容器:Container container = this.getContentPane();
1.1 Window窗口容器
包含:1:Frame窗口, 2:Dialog弹窗
AWT:Frame
java
Frame f = new Frame([title]);
f.setLocation(x, y) // 设置窗口坐标,单位像素
f.setSize(w, h); // 设置窗口宽度,高度
f.setVisible(true); // true显示,false隐藏
f.setBounds(x, y ,w, h); // 同时设置坐标及宽度高度
f.setResizable(false); // 固定窗口大小(false:大小不可变)
f.setBackground( new Color(r,g,b) ) // 设置背景色
// 子窗口
new Dialog(Frame, title, model) // 子窗口:model=false可操作父窗口
d.setBounds(x, y ,w, h); // 子窗口坐标,宽度高度
d.setVisible(true); // 子窗口显示
// 文件选择窗口
new FileDialog(Frame, title, FileDialog.Load | FileDialog.SAVE);
Swing:JFrame
java
Jframe f = new Jframe([title]) // Jframe有默认关闭窗口事件
f.setLocation(x, y)
f.setSize(w, h);
f.setVisible(true);
f.setBounds(x, y ,w, h);
f.setResizable(false);
f.setBackground( new Color(r,g,b) )
// 子窗口
new JDialog(Frame, title, true)
1.2 Panel中间容器
包含 1:控件,2:Applet
AWT:Panel
java
Panel p = new Panel()
p.setBounds(x,y,w,h)
p.setBackground(new Color(r,g,b) )
p.add(控件);
f.add(p);
Swing:JPanel
java
JPanel p = new JPanel()
p.setBounds(x,y,w,h)
p.setBackground(new Color(r,g,b) )
p.add(控件);
f.add(p);
1.3 ScrollPane(有滚动条中间容器)
AWT:ScrollPane
java
ScrollPane sp = new ScrollPane();
sp.add(控件);
f.add(sp);
Swing:JScrollPane
java
JScrollPane sp = new JScrollPane();
sp.add(控件);
f.add(sp);
2 布局管理器
2.1 FlowLayout 流式布局
java
f.setLayout(new FlowLayout()); // 由左向右,自动换行
f.setLayout(new FlowLayout(FlowLayout.LEFT | FlowLayout.CENTER | FlowLayout.RIGHT));
f.setLayout(new FlowLayout(FlowLayout.LEFT [水平间距, 垂直间距]));
2.2 GridLayout 网格布局
java
f.setLayout(new GridLayout(行数, 列数));
f.add(控件); // 自动布局
2.3 BorderLayout 边框布局
java
f.setLayout(new BorderLayout());
f.add(容器, BorderLayout.NORTH);
// NORTH(上),CENTER(中),SOUTH(下),WEST(左),EAST(右)
2.4 CardLayout 卡片布局
略
3 控件
3.1 TextField(文本框)
AWT:TextField
java
TextField tf = new TextField([text]);
tf.setEnabled(true); // true活性,false非活性
tf.setVisible(true); // true显示,false不显示
tf.setSize(w, h); // 宽,高
tf.setText("内容");
tf.setEchochar('*'); // AWT专有密码框
Swing:JTextField
java
JTextField tf = new JTextField([text]);
tf.setEnabled(true);
tf.setVisible(true);
tf.setSize(w, h);
tf.setText("内容");
new JPasswordField().setEchoChar('*'); // Swing专有密码框
3.2 TextArea(文本域)
AWT:TextArea ta = new TextArea(); // 方法同文本框一样
Swing:JTextArea ta = new JTextArea(); // 方法同文本框一样
3.3 Checkbox(复选框)
AWT:Checkbox
java
Checkbox ck = new Checkbox([label]);
ck.setEnabled(false); // true活性,false非活性
ck.setVisible(true); // true显示,false不显示
ck.setLabel("显示文本");
ck.setState(true); // true选中,false未选中
Swing:JCheckBox
java
JCheckBox ck = new JCheckBox([text]);
ck.setEnabled(false); // true活性,false非活性
ck.setVisible(true); // true显示,false不显示
ck.setText("显示文本");
ck.setSelected(true); // true选中,false未选中
3.4 CheckboxGroup(单选框)
AWT:CheckboxGroup
java
CheckboxGroup cg=new CheckboxGroup(); // 定义分组
checkbox1 = new Checkbox().setLabel(""); // 创建复选框
checkbox1.setCheckboxGroup(cg); // 复选框加入组内(变为单选)
checkbox2.setCheckboxGroup(cg); // 复选框加入组内(变为单选)
cg.setSelectedCheckbox(checkbox2); // 设置默认选中项目
f.add(ck1); // 将单选按钮加入容器
Swing:ButtonGroup
java
ButtonGroup bg = new ButtonGroup(); // 定义分组
rb1 = new JRadioButton().setText("内容");// 创建单选按钮
bg.add(rb1); // 将单向按钮加入分组
bg.add(rb2);
rb2.setSelected(true); // 设置默认选中
f.add(rb1); // 按钮加入容器
3.5 Label(标签)
AWT:Label
java
Label lbl = new Label();
lbl.setEnabled(false);
lbl.setVisible(true);
lbl.setText("内容");
Swing:JLabel
java
JLabel lbl = new JLabel();
lbl.setEnabled(false);
lbl.setVisible(true);
lbl.setText("内容");
3.6 Choice(下拉框)
AWT:Choice
java
Choice cho = new Choice();
cho.setEnabled(false);
cho.setVisible(true);
cho.add("内容1"); // 添加元素
cho.addItem("内容2"); // 添加元素
cho.select(0); // 根据下标设置默认选中项目
cho.select("内容2"); // 根据内容设置默认选中项目
cho.remove(0); // 删除下标0元素
cho.remove("内容2"); // 删除指定内容元素
int index = cho.getSelectedIndex()); // 获取选中项目下标
String item = cho.getSelectedItem()); // 获取选中项目内容
Swing:JComboBox
java
JComboBox<String> cb = new JComboBox<String>();
cb.setEnabled(false);
cb.setVisible(true);
cb.addItem("内容2"); // 添加元素
cb.setSelectedIndex(0); // 根据下标设置默认选中项目
cb.setSelectedItem("内容2"); // 根据内容设置默认选中项目
cb.remove(下标0); // 删除指定下标元素
cb.removeItem("内容2"); // 删除指定内容元素
int index = cb.getSelectedIndex()); // 获取选中项目下标
String item = cb.getSelectedItem()); // 获取选中项目内容
3.7 List(列表框)
AWT:java.awt.List
java
java.awt.List list = new List();
list =new List(同时显示数量);
list =new List(同时显示数量, false); // 默认false不可多选
list.setEnabled(false);
list.setVisible(true);
list.add("item1");
list.add("item1", 插入下标);
list.select(下标); // 选中项目
list.deselect(下标); // 取消选中
list.isIndexSelected(下标) // 判断指定下标是否选中
int index = list.getSelectedIndex() // 获取选中项目下标
String item = list.getSelectedItem(); // 获取选中项目内容
list.remove(下标) // 删除指定下标元素
list.remove("内容"); // 删除指定内容元素
Swing:javax.swing.JList
java
javax.swing.Jlist list = new Jlist<String>(数组);
DefaultListModel<String> model = new DefaultListModel<>();
list = new JList<String>(model);
list.setEnabled(false);
list.setVisible(true);
model.addElement("item1");
model.add(下标, "item1");
list.setListData(数组);
list.setSelectIndex(下标); // 选中指定下标项目
list.isSelectedIndex(下标) // 判断是否选中
int index = list.getSelectedIndex(); // 获取选中项目下标
String val = list.getSelectedValue(); // 获取选中项目内容
model.remove(下标);
3.8 Button(按钮)
AWT:Button
java
btn =new Button("按钮名");
btn.setEnabled(false);
btn.setVisible(true);
btn.setSize(w, h);
Swing:JButton
java
btn =new JButton("按钮名");
btn.setEnabled(false);
btn.setVisible(true);
btn.setSize(w, h);
3.9 ImageIcon(图片)
Swing:ImageIcon
java
URL url = 类.class.getResource("xx.jpg"); // 获取图片路径
ImageIcon img = new ImageIcon(url); // 创建图片控件
JLabel lb = new JLabel(img); // 添加到Label容器中
JButton btn = new JButton(img) // 添加到Button容器中
lb | btn.setIcon(img); // 修改图片
f.add(lb);
4 事件处理
4.1 窗口关闭事件
AWT:AWT没有默认窗口关闭事件,需要手动添加
java
frame.addWindwoListener(new WindowAdapter(){
@Override
public void windwoClosing(WindowEvent e){
System.exit(0);
}
});
Swing:
java
jframe.setDefaultCloseOperatin(
WindowConstans.EXIT_ON_CLOSE // Swing退出并关闭程序
)
// HIDE_ON_CLOSE // 默认(隐藏)
// DO_NOTHING_ON_CLOSE // 什么也不做
4.2 组件激活事件
AWT和Swing通用
触发组件:ActionListener// JTextField,JCheckBox,JComboBox,Jbutton
java
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Jbutton btn = (Jbutton)e.getSource(); // 可获取单击事件标签
}
});
4.3 其它事件
(1) 选择组件:ItemListener// JCheckBox,JComboBox,Jbutton
(2) 键盘输入:KeyListener// JTextField,JTextArea,JCheckBox,Jlabel,JComboBox,Jbutton
(3) 失去光标:FocusListener // JTextField,JTextArea,JCheckBox,Jlabel,JComboBox,Jbutton
(4) 文本变化:TextListener // TextField
5 菜单
AWT:Menu, MenuItem, MenuBar
java
// 创建menu菜单
Menu m1 = new Menu("menu1");
// 创建菜单项目
MenuItem it11 = new MenuItem("itme11");
m1.add(it11); // 添加进menu
// 创建子菜单
Menu m12 = new Menu("menu12");
// 创建子菜单项目
MenuItem it121 = new MenuItem("itme121");
m12.add(it121); // 添加子菜单
m1.add(m12); // 将子菜单添加进Menu
// 创建菜单容器
MenuBar mb = new MenuBar();
mb.add(m1); //将menu添加进容器
f.setMenuBar(mb);//将容器添加进frame
AWT效果:

Swing:JMenu, JMenuItem, JMenuBar
java
// 创建menu菜单
JMenu m1 = new JMenu("menu1");
// 创建菜单项目
JMenuItem it11 = new JMenuItem("itme11");
m1.add(it11); // 添加进menu
// 创建子菜单
JMenu m12 = new JMenu("menu12");
// 创建子菜单项目
JMenuItem it121 = new JMenuItem("itme121");
m12.add(it121); // 添加子菜单
m1.add(m12); // 将子菜单添加进Menu
// 创建菜单容器
JMenuBar mb = new JMenuBar();
mb.add(m1); //将menu添加进容器
f.setJMenuBar(mb);//将容器添加进JFrame
Swing效果:

6 弹窗
Swing:showMessageDialog,showConfirmDialog
java
// 信息弹窗
JOptionPane.showMessageDialog(frame,
"内容",
"窗口名",
JOptionPane.ERROR_MESSAGE); // 错误信息
// JOptionPane.INFORMATION_MESSAGE // 提示信息
// JOptionPane.WARNING_MESSAGE // 警告信息
// JOptionPane.QUESTION_MESSAGE // 询问信息
// JOptionPane.PLAIN_MESSAGE // 普通信息
// 询问弹窗
int res = JOptionPane.showConfirmDialog(frame,
"内容",
"窗口名",
JOptionPane.YES_NO_CANCEL_OPTION); // 显示(是_否_取消)
// JOptionPane.YES_NO_OPTION // 显示(是_否)
// JOptionPane.OK_CANCEL_OPTION // 显示(OK_取消)
// JOptionPane.OK_OPTION // 显示(OK)
// JOptionPane.CLOSED_OPTION // 显示(关闭)
if(res == JOptionPane.YES_OPTION) { // 按下(是)
...
} else if(res == JOptionPane.NO_OPTION) { // 按下(否)
...
} else if(res == JOptionPane.CANCEL_OPTION) { // 按下(取消)
...
}
// 输入弹窗
String input = JOptionPane.showConfirmDialog(frame,
"内容",
"窗口名",
JOptionPane.PLAIN_MESSAGE); // 信息入力弹窗
7 画笔
7.1 画图
java
public class GrapTest extends Frame {
@Override
public void paint(Graphics g) {
g.setColor(Color.RED); // 设置画笔颜色
g.drawString("hello", 100, 100);// 写字符串
g.drawImage // 写图片
g.drawLine // 写线
g.drawOval(x, y, w, h); / 写空心圆
g.drawRect(x, y, w, h); // 写空心矩形
g.fillOval(x, y, w, h); // 写实心圆
}
7.2 画笔
java
GrapTest g = new GrapTest();
g.setVisiable(true); 打开Frame自动画图
g.addMouseListener( new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e){ // 鼠标按下事件
Frame f = (Frame)e.getSource();
全局list.add(e.getPoint()); // 获取鼠标坐标添加到list
f.repaint(); // 刷新画面,调用print循环画图
}
// 重写上记画图paint方法,循环list画点
})