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);
|
事件
写监听的三种方式:
- 第一种:
- Jframe子类实现ActionListener接口
- 注册监听
- 实现actionPerformed()方法,
- 第二种
- 在注册监听的时候,写内部类(new ActionListener(){})
- 实现内部类中actionPerformed()方法。
- 第三种
- 单独写一个继承自ActionListener的内部类
- class Monitor implements ActionListener{}
- 主方法中声明对象
- Monitor bh = new Monitor();
- 注册监听
- 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;
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(); } } }); }
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) { card.first(panel_1); } }); btnNewButton_1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { 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;
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(); } } }); }
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的插件截图
