前言
henu期末要考,都是一些简单的记录,但是还是对窗口设计有了一些理解
Swing是JAVA基础类的一部分,Swing的功能组件大多都由类来实现。J开头的像JFrame、JButton都是swing下的,Frame、Button都是awt下的,而swing是awt的升级版。Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表 ,是java工具开发的首选.
窗口
窗口类组件,可以独立显示,一个图形界面至少需要一个窗口,绝大多数 Swing 图形界面程序使用 JFrame 作为顶层容器
1 | package JFrame; |
面板
中间容器充当基本组件的载体,不可独立显示。中间容器可以添加若干基本组件(也可以嵌套添加中间容器),对容器内的组件进行管理,类似于给各种复杂的组件进行分组管理。最顶层的一个中间容器必须依托在顶层容器(窗口)内。
JPanel 是在开发中使用频率非常高的一般轻量级面板容器组件。
JavaSwing 布局管理器
- FlowLayout(流式布局)
1 | FlowLayout.LEFT : 左对齐 |
BorderLayout(边界布局)
1
2
3
4
5
6// 把 5 个按钮添加到容器中的 5 个方位
panel.add(btnN, BorderLayout.NORTH);
panel.add(btnS, BorderLayout.SOUTH);
panel.add(btnW, BorderLayout.WEST);
panel.add(btnE, BorderLayout.EAST);
panel.add(btnC, BorderLayout.CENTER);GridLayout(网格布局)
1
2
3
4
5
6
7JPanel panel3 = new JPanel(new GridLayout(2, 1));
JButton btnN3 = new JButton("Button_North");
JButton btnS3 = new JButton("Button_South");
panel3.add(btnN3);
panel3.add(btnS3);
组件
JButton(按钮)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23JButton button1=new JButton("start");
JButton button2=new JButton("stop");
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("start");
}
});
MyMonitor myMonitor=new MyMonitor();
button2.addActionListener(myMonitor);
// 设置按钮的默认图片button2.setIcon(new ImageIcon("button_normal.png"));
// 设置按钮被点击时的图片button2.setPressedIcon(new ImageIcon("button_press.png"));
Jf.add(button1,BorderLayout.EAST);
Jf.add(button2,BorderLayout.WEST);
Jf.pack();
Jf.setSize( 400, 400);
}
}
class MyMonitor implements ActionListener{
public void actionPerformed(ActionEvent e) {
System.out.println("Stop");
}
}JLabel(标签)
1
2
3
4JPanel panel = new JPanel();
// 添加一个标签
JLabel label = new JLabel("水果:");
panel.add(label);JTextField(文本框)
JTextArea(文本区域)
1
2
3
4
5
6
7JPanel panel = new JPanel();
// 创建一个 5 行 10 列的文本区域
final JTextArea textArea = new JTextArea(5, 10);
// 设置自动换行
textArea.setLineWrap(true);
// 添加到内容面板
panel.add(textArea);JComboBox(下拉列表框)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20// 需要选择的条目
String[] listData = new String[]{"香蕉", "雪梨", "苹果", "荔枝"};
// 创建一个下拉列表框
JComboBox comboBox = new JComboBox(listData);
// 设置默认选中的条目
comboBox.setSelectedIndex(2);
// 添加到内容面板
panel.add(comboBox);
//增加元素
cb_channel.addItem("123");
//获取选中的选项索引
int i=cb_channel.getSelectedIndex();
//为组合框注册监听器ItemListener
cb_channel.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
int i=cb_channel.getSelectedIndex();
list_shows.setListData(shows[i]);
}
});JList(列表框)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32// 创建一个 JList 实例
JList list = new JList();
// 设置一下首选大小
list.setPreferredSize(new Dimension(200, 100));
// 设置选择模式,有三个模式: 只能单选、可间隔多选、可连续多选
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
// 设置选项数据(内部将自动封装成 ListModel )
list.setListData(new String[]{"香蕉", "雪梨", "苹果", "荔枝"});
// 设置默认选中项
list.setSelectedIndex(1);
//判断是否有选中的值
list_shows.isSelectionEmpty()
//获取所选值
list_shows.getSelectedValue();
// 获取所有被选中的选项索引
int[] indices = list.getSelectedIndices();
// 获取选中的选项索引
int getSelectedIndex()
// 添加选项选中状态被改变的监听器
list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
// 获取选项数据的 ListModel
ListModel<String> listModel = list.getModel();
// 输出选中的选项
for (int index : indices) {
System.out.println("选中: " + index + " = " + listModel.getElementAt(index));
}
System.out.println();
}
});JDialog(对话框)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33/**
* 显示一个自定义的对话框
*
* @param owner 对话框的拥有者
* @param parentComponent 对话框的父级组件
*/
private static void showCustomDialog(Frame owner, Component parentComponent) {
// 创建一个模态对话框
final JDialog dialog = new JDialog(owner, "提示", true);
// 设置对话框的宽高
dialog.setSize(250, 150);
// 设置对话框大小不可改变
dialog.setResizable(false);
// 设置对话框相对显示的位置
dialog.setLocationRelativeTo(parentComponent);
JLabel messageLabel = new JLabel("对话框消息内容");
// 创建一个按钮用于关闭对话框
JButton okBtn = new JButton("确定");
okBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 关闭对话框
dialog.dispose();
}
});
JPanel panel = new JPanel();
panel.add(messageLabel);
panel.add(okBtn);
// 设置对话框的内容面板
dialog.setContentPane(panel);
// 显示对话框
dialog.setVisible(true);
}JMenuBar(菜单栏)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66/*
* 创建一个菜单栏
*/
JMenuBar menuBar = new JMenuBar();
/*
* 创建一级菜单
*/
JMenu fileMenu = new JMenu("文件");
JMenu editMenu = new JMenu("编辑");
JMenu viewMenu = new JMenu("视图");
JMenu aboutMenu = new JMenu("关于");
// 一级菜单添加到菜单栏
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(viewMenu);
menuBar.add(aboutMenu);
/*
* 创建 "文件" 一级菜单的子菜单
*/
JMenuItem exitMenuItem = new JMenuItem("退出");
// 子菜单添加到一级菜单
fileMenu.addSeparator(); // 添加一条分割线
fileMenu.add(exitMenuItem);
/*
* 创建 "编辑" 一级菜单的子菜单
*/
JMenuItem copyMenuItem = new JMenuItem("复制");
JMenuItem pasteMenuItem = new JMenuItem("粘贴");
// 子菜单添加到一级菜单
editMenu.add(copyMenuItem);
editMenu.add(pasteMenuItem);
/*
* 创建 "视图" 一级菜单的子菜单
*/
final JCheckBoxMenuItem checkBoxMenuItem = new JCheckBoxMenuItem("复选框子菜单");
final JRadioButtonMenuItem radioButtonMenuItem01 = new JRadioButtonMenuItem("单选按钮子菜单01");
final JRadioButtonMenuItem radioButtonMenuItem02 = new JRadioButtonMenuItem("单选按钮子菜单02");
// 子菜单添加到一级菜单
viewMenu.add(checkBoxMenuItem);
viewMenu.addSeparator(); // 添加一个分割线
viewMenu.add(radioButtonMenuItem01);
viewMenu.add(radioButtonMenuItem02);
// 其中两个 单选按钮子菜单,要实现单选按钮的效果,需要将它们放到一个按钮组中
ButtonGroup btnGroup = new ButtonGroup();
btnGroup.add(radioButtonMenuItem01);
btnGroup.add(radioButtonMenuItem02);
// 默认第一个单选按钮子菜单选中
radioButtonMenuItem01.setSelected(true);
/*
* 菜单项的点击/状态改变事件监听,事件监听可以直接设置在具体的子菜单上(这里只设置其中几个)
*/
// 设置 "新建" 子菜单被点击的监听器
newMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("新建 被点击");
}
});
JPopupMenu(弹出菜单)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72// 直接在内容面板上添加鼠标监听器
panel.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
// 鼠标点击(按下并抬起)
}
public void mousePressed(MouseEvent e) {
// 鼠标按下
}
public void mouseReleased(MouseEvent e) {
// 鼠标释放
// 如果是鼠标右键,则显示弹出菜单
if (e.isMetaDown()) {
showPopupMenu(e.getComponent(), e.getX(), e.getY());
}
}
public void mouseEntered(MouseEvent e) {
// 鼠标进入组件区域
}
public void mouseExited(MouseEvent e) {
// 鼠标离开组件区域
}
});
public static void showPopupMenu(Component invoker, int x, int y) {
// 创建 弹出菜单 对象
JPopupMenu popupMenu = new JPopupMenu();
// 创建 一级菜单
JMenuItem copyMenuItem = new JMenuItem("复制");
JMenuItem pasteMenuItem = new JMenuItem("粘贴");
JMenu editMenu = new JMenu("编辑"); // 需要 添加 二级子菜单 的 菜单,使用 JMenu
JMenuItem fileMenu = new JMenuItem("文件");
// 创建 二级菜单
JMenuItem findMenuItem = new JMenuItem("查找");
JMenuItem replaceMenuItem = new JMenuItem("替换");
// 添加 二级菜单 到 "编辑"一级菜单
editMenu.add(findMenuItem);
editMenu.add(replaceMenuItem);
// 添加 一级菜单 到 弹出菜单
popupMenu.add(copyMenuItem);
popupMenu.add(pasteMenuItem);
popupMenu.addSeparator(); // 添加一条分隔符
popupMenu.add(editMenu);
popupMenu.add(fileMenu);
// 添加菜单项的点击监听器
copyMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("复制 被点击");
}
});
findMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("查找 被点击");
}
});
// ......
// 在指定位置显示弹出菜单
popupMenu.show(invoker, x, y);
}事件