0%

706Swing

2017年7月6日 下午3:16

首先了解一下Swing的模式


图1 Swing的基本结构(对应着Eclipse的图形界面

注意点:

1. **这个结果图也就说明了操作的步骤**
    1. 首先创建一个Container
    2. 然后给Container添加一个Layout
    3. 然后给Container中添加各种Componet
    4. 给Component添加监听
    5. 写监听处理
注: 在刚刚创建的JFrame中已经有一个Panel容器,并且设置为BorderLayout
2. **规律总结:**
    1. 这就像html一层一层的铺
    2. 动手之前就要从底层一直考虑到顶层,想好了再动手
    3. 要起好变量名字

具体知识点

1. 布局管理器(Layout)的理解
    1. 为了使我们生成的图形用户界面具有良好的**平台无关性**
    2. Java 语言中,提供了布局管理器这个工具来管理组件在容器中的布局
    3. 而**不使用直接**设置组件**位置**和**大小**的方式。
    4. **每个容器**都有一个布局管理器
    5. 当容器需要对某个组件迚行定 位戒判断其大小尺寸时,就会调用其对应的布局管理器。
2. 组件定位的两种方式
    1. 通过**布局管理器**自动
    2. 也可以取消布局管理器的作用,收到设置componet
        1. setLocation()
        2. setSize()
        3. setBounds()
3. 认识几个重要的方法
    1. f.setLayout(null);  取消布局管理器
    2. f.setVisible(true);默认为不可见的
4. 容器的分类
    1. 顶级容器
        1. JFrame此窗口带有边框、 标题、用于关闭和最小化窗口的图标等
        2. JDialog:用于对话框的类。
        3. JApplet:用于使用 Swing 组件的 Java Applet 的类。
    2. 中间容器
        1. JPanel:最灵活、最常用的中间容器。
        2. JScrollPane:与 JPanel 类似,但还可在大的组件或可扩展组件周围提供滚动条。
        3. JTabbedPane:包含多个组件,但一次只显示一个组 件。用户可在组件之间方便地切换。
        4. JToolBar:按行或列排列一组组件(通常是按钮)。
5. panel容器
    1. **Panel无法单独显示**,必须添加到某个容器中
    2.  Panel的缺省布局管理器为**FlowLayout**。
    3. 当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以有自己 的布局管理器。因此,可以利用Panel使得BorderLayout中某个区域显 示多个组件。
6. frame容器
    1. Frame是一个顶级窗口
    2. Frame的缺省布局管理器为**BorderLayout**
7. JLable
    1. JLabel(Icon icon):icon表示使用的图标
    2. JLabel(String text,Icon icon,int align):text表 示使用的字符串; icon表示使用的图标;align表示水平 对齐方式,其值可以为:LEFT、RIGHT、CENTER。
1
2
ImageIcon icon = new ImageIcon("Calv.gif");
JLabel calv_label=newJLabel("这是 Calvin", icon, SwingConstants.LEFT);

事件

写监听的三种方式:

  1. 第一种:
    1. Jframe子类实现ActionListener接口
    2. 注册监听
    3. 实现actionPerformed()方法,
  2. 第二种
    1. 在注册监听的时候,写内部类(new ActionListener(){})
    2. 实现内部类中actionPerformed()方法。
  3. 第三种
    1. 单独写一个继承自ActionListener的内部类
      1. class Monitor implements ActionListener{}
    2. 主方法中声明对象
      1. Monitor bh = new Monitor();
    3. 注册监听
      1. b.addActionListener(bh);注册监听器

有哪些监听接口和接口对应的方法


图2

图3

例子

卡片切换


图4 效果图

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package package1;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.CardLayout;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.JTabbedPane;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class JframeTest extends JFrame {
private JTextField textField;
private CardLayout card = null;

/*
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JframeTest frame = new JframeTest();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/*
* Create the frame.
*/
public JframeTest() {


setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);

JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.NORTH);

JButton btnNewButton = new JButton("New button");
panel.add(btnNewButton);

JButton btnNewButton_1 = new JButton("New button");
panel.add(btnNewButton_1);

JPanel panel_1 = new JPanel();
getContentPane().add(panel_1, BorderLayout.CENTER);

card=new CardLayout(0, 0);
panel_1.setLayout(card);

JLabel lblCard = new JLabel("Card2");
lblCard.setHorizontalAlignment(SwingConstants.CENTER);
panel_1.add(lblCard, "name_2407873724218434");

JLabel lblNewLabel = new JLabel("card1");
lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
panel_1.add(lblNewLabel, "name_2407873736860429");


btnNewButton.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
card.first(panel_1);
}
});

btnNewButton_1.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
card.last(panel_1);
}
});

}

}

菜单栏


效果图5

效果图6

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
73
74
75
76
77
package package1;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

public class Frame1 extends JFrame implements ActionListener{

private JPanel contentPane;
private JMenuItem mntmOpen;
private JMenuItem mntmSave;

/*
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Frame1 frame = new Frame1();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/*
* Create the frame.
*/
public Frame1() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);

JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);

JMenu menu = new JMenu("\u6587\u4EF6");
menuBar.add(menu);

mntmOpen = new JMenuItem("open");
menu.add(mntmOpen);

mntmSave = new JMenuItem("save");
menu.add(mntmSave);

mntmOpen.addActionListener(this);
mntmSave.addActionListener(this);

contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
}

@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == mntmOpen){
JOptionPane.showConfirmDialog(null, "Open?");
}
if(e.getSource() == mntmSave){
JOptionPane.showConfirmDialog(null, "Save?");
}

}

}

附:eclipse的插件截图