Java Swing学习笔记
Chap1&2 Java Swing 概述
1.Swing 以AWT为基础。
2.使用eclipse建立Java工程,实现一个Java Swing程序实例。
package com.swing.test1; import javax.swing.JFrame; public class SwingTest1 {//Swing 练习1 static final int WIDTH=300; static final int HEIGHT=200; public static void main(String[] args) { JFrame f=new JFrame("Hello Swing"); f.setSize(WIDTH, HEIGHT); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } }
3.Swing包
包 |
描 述 |
com.sum.swing.plaf.motif |
用户界面代表类,实现Motif界面样式 |
com.sum.java.swing.plaf.windows |
用户界面代表类,实现Windows界面样式 |
javax.swing |
Swing组件和使用工具 |
javax.swing.border |
Swing轻量级组件的边框 |
javax.swing.colorchooser |
JColorChooser的支持类/接口 |
javax.swing.event |
事件和侦听器类 |
javax.swing.filechooser |
JFileChooser的支持类/接口 |
javax.swing.pending |
未完全实现的Swing组件 |
javax.swing.plaf |
抽象类,定义UI代表的行为 |
javax.swing.plaf.basic |
实现所有标准界面样式公共功能的基类 |
javax.swing.plaf.metal |
用户界面代表类,实现Metal界面样式 |
javax.swing.table |
JTable组件 |
javax.swing.text |
支持文档的显示和编辑 |
javax.swing.text.html |
支持显示和编辑HTML文档 |
javax.swing.text.html.parser |
HTML文档的分析器 |
javax.swing.text.rtf |
支持显示和编辑RTF文件 |
javax.swing.tree |
JTree组件的支持类 |
javax.swing.undo |
支持取消操作 |
其中,swing包是Swing提供的最大包,它包含将近100个类和25个接口,几乎所有的Swing组件都在swing包中,只有JTableHeader和JTextComponent是例外,它们分别在swing.table和swing.text中。
— swing.border包中定义了事件和事件监听器类,与AWT的event包类似,它们都包括事件类和监听器接口。
— swing.pending包包含了没有完全实现的Swing组件。— swing.table包中主要包括表格组建(JTable)的支持类。
— swing.tree同样是JTree的支持类。
— swing.text、swing.text.html、swing.text.html.parser和swing.text.rtf都是用于显示和编辑文档的包。
Chap3 Java Swing组建基础
1.Swing组件类的层次
Swing组件分从显示效果上分为两种类型:JComponent类和Window类;
- JComponent组件主要包括一些不能独立显示的组件(必须依附与其他组件才能显示)。
- JPanel
- JTable
- JTree
- JTextArea
- JTextField
- JButton
- Window组件类主要包括可以独立显示的组件。
- JFrame
- JDialog
- 顶级组件(顶级容器,可以独立显示)
- JFrame、JApplet、JDialog、JWindow
- JFrame、JApplet、JDialog、JWindow
- 中间组件
- 中间容器类(可以充当容器,但不能独立显示)
- JPanel、JScrollPane、JSplitPane、JToolBar
- JPanel、JScrollPane、JSplitPane、JToolBar
- 特殊中间组件类(在GUI上起特殊作用的中间层,属于中间容器类,但是能起到美化和专业化的作用)
- JInternalFrame、JLayeredPane、JRootPane等
- JInternalFrame、JLayeredPane、JRootPane等
- 中间容器类(可以充当容器,但不能独立显示)
- 基本组件(实现人机交互的组件,只能依附于中间组件才能显示)
- JButton、JComboBox、JList、JMenu、JSlider、JTextField等
一切图形化的东西必须包括在顶级容器内。Swing中主要有三种可以使用的顶级容器:
- JFrame(用于设计类似于Windows系统中的窗口程序)
- 内容面板(ContentPane)
- 基本组件
- 基本组件
- 菜单条
- JDialog(用于设计对话框)
- JApplet(用于设计可以嵌入到网页中的Java程序)
JFrame f=new JFrame("添加内容到顶级容器"); f.setSize(WIDTH,HEIGHT); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); //顶级容器添加内容面板 JPanel contentPane=new JPanel(); f.setContentPane(contentPane); //添加基本组件到内容面板 JButton b=new JButton("确定"); contentPane.add(b);4.添加菜单到顶级容器
JFrame f=new JFrame("添加内容到顶级容器"); f.setSize(WIDTH,HEIGHT); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); //顶级容器添加内容面板 JPanel contentPane=new JPanel(); f.setContentPane(contentPane); //添加基本组件到内容面板 JButton b=new JButton("确定"); contentPane.add(b); //添加菜单到顶级面板 JMenuBar menubar=new JMenuBar(); f.setJMenuBar(menubar); JMenu menu1=new JMenu("文件"); JMenu menu2=new JMenu("编辑"); JMenu menu3=new JMenu("视图"); menubar.add(menu1); menubar.add(menu2); menubar.add(menu3); JMenuItem item1=new JMenuItem("打开"); JMenuItem item2=new JMenuItem("保存"); JMenuItem item3=new JMenuItem("退出"); menu1.add(item1); menu1.add(item2); menu1.addSeparator(); menu1.add(item3); f.setVisible(true);//得刷新一次5.JComponent类(所有轻量级组件的父类)
JComponent的九大特性:
- Tooltips工具提示功能(鼠标停在组件上,显示提示),通过setToolTipText实现
- 绘画和边框(setBorder,BorderFactory)
- 可插入的观感器(定制自己的桌面,更换新的颜色方案,包括默认、Motif和Windows的L&F)
- 自定义属性
- layout支持
- 无障碍
- 拖拽支持
- 双缓冲
- 键绑定
Chap4 Label&Button
一、标签的使用
- 常用构造:JLabel label=new JLabel("label");
- 常用方法:label.setText();label.getText();
|
二、按钮的使用
1.普通按钮(JButton):
JButton btn=new JButton("普通按钮");
btn.setEnabled(true);
btn.setVisible(true);
pane.add(btn);
2.单选按钮(JRadioButton):
//添加单选按钮
JRadioButton rbtn1=new JRadioButton("Ars",true);
JRadioButton rbtn2=new JRadioButton("Mu");
JRadioButton rbtn3=new JRadioButton("Liv");
ButtonGroup bg=new ButtonGroup();
bg.add(rbtn1);
bg.add(rbtn2);
bg.add(rbtn3);
pane.add(rbtn1);
pane.add(rbtn2);
pane.add(rbtn3);
3.复选框(JCheckbox):
//添加复选框
JCheckBox cb1=new JCheckBox("tennis");chap 05 布局管理器
一、布局管理器概述:
布局管理器是相对于contentPanel而言的。
- BorderLayout:东、南、西、北、中;
- FlowLayout:按照加入的先后顺序排列,行满换行;从左到右,居中排列;
- GridLayout:将空间划分为网状区域;
- GriBagLayout:网状划分,功能较GridLayout复杂;
- CardLayout:将组件当成卡片,每一只能显示一个。
- BoxLayout:通过允许在容器中水平或垂直的方式安排多个组件;
- SpringLayout:通过定义组件边沿的关系来实现布局;
- GroupLayout:指定一个窗体上组件彼此之间的关系。
二、布局管理器的种类:
1.BorderLayout:
JFrame jf=new JFrame("测试程序");
jf.setSize(WIDTH,HEIGHT);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
JPanel contentPane=new JPanel();
jf.setContentPane(contentPane);
JButton b1=new JButton("生活");
JButton b2=new JButton("工作");
JButton b3=new JButton("睡觉");
JButton b4=new JButton("购物");
JButton b5=new JButton("饮食");
BorderLayout lay=new BorderLayout();//创建一个布局管理器对象,将中间容器设置为此布局管理
jf.setLayout(lay);
contentPane.add(b1,"North");//将五个普通按钮组件分别按照东、南、西、北、中五个方位添加到中间容器中
contentPane.add(b2,"South");
contentPane.add(b3,"East");
contentPane.add(b4,"West");
contentPane.add(b5,"Center");
2.FlowLayout:
JButton b1=new JButton("港币");
JButton b2=new JButton("人民币");
JButton b3=new JButton("美元");
JButton b4=new JButton("欧元");
JButton b5=new JButton("英镑");
contentPane.setLayout(new FlowLayout());//将中间容器的布局管理器设置为FlowLayout
contentPane.add(b1); //将五个按钮分别按照FlowLayout布局管理器方式添加到中间容器中
contentPane.add(b2);
contentPane.add(b3);
contentPane.add(b4);
contentPane.add(b5);
jf.pack(); //自动调整Frame的大小,使得所有的控件都能显示出来
3.GridLayou:
JButton b1=new JButton("港币");
JButton b2=new JButton("人民币");
JButton b3=new JButton("美元");
JButton b4=new JButton("欧元");
JButton b5=new JButton("英镑");
JButton b6=new JButton("主板");
JButton b7=new JButton("内存");
JButton b8=new JButton("硬盘");
JButton b9=new JButton("显示器");GridLayout gird=new GridLayout(3,3); //创建一个 GridLayout布局管理器对象,将之行数设为3,列数设为3,并且将之作为中间容器的布局管理器
contentPane.setLayout(gird);contentPane.add(b1); //将九个普通按钮组件一一添加到中间容器中
contentPane.add(b2);
contentPane.add(b3);
contentPane.add(b4);
contentPane.add(b5);
contentPane.add(b6);
contentPane.add(b7);
contentPane.add(b8);
contentPane.add(b9);
jf.pack();
4.GridBagLayut:
GridBagLayout按照开发人员自己的思路来排列控件位置,二GridLayout布局管理器是根据系统的安排来布局。
使用步骤:
- 创建GridBagLayout对象;
- 将容器设置成为此对象的布局管理器;
- 创建约束GridBagConstraints对象;
- fill参数用于档组件不能填充单元格时,在各个方向上是否填充;
- anchor参数用于当一个组件大于分配给它的单元格时约束缩小该组件;
- weightx是设置放大时的增量数字,为0是放大不变;100时放大完全填充;
- gridx定义组件左上角的行与列的位置;
- gridwidth定义组件所占用的列数
- 创建各个相应的组件;
- 添加各个组件与约束到网格组布局管理器中。
public class MyPanel extends JPanel
{
static final int WIDTH=300;
static final int HEIGHT=150;
JFrame loginFrame;
MyPanel()
{
loginFrame=new JFrame("Info Goverment");
loginFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridBagLayout lay=new GridBagLayout();//创建网格组布局方式对象
setLayout(lay);
loginFrame.add(this, BorderLayout.WEST);
loginFrame.setSize(WIDTH,HEIGHT);
Toolkit kit=Toolkit.getDefaultToolkit();//设置顶层容器框架为居中
Dimension screenSize=kit.getScreenSize();
int width=screenSize.width;
int height=screenSize.height;
int x=(width-WIDTH)/2;
int y=(height-HEIGHT)/2;
loginFrame.setLocation(x,y);
JButton ok=new JButton("确认");
JButton cancel=new JButton("放弃");
JLabel title=new JLabel("布局管理器测试窗口");
JLabel name=new JLabel("用户名");
JLabel password=new JLabel("密 码");
final JTextField nameinput=new JTextField(15);
final JTextField passwordinput=new JTextField(15);
GridBagConstraints constraints=new GridBagConstraints();
constraints.fill=GridBagConstraints.NONE;
constraints.anchor=GridBagConstraints.EAST;
constraints.weightx=3;
constraints.weighty=4;
add(title,constraints,0,0,4,1); //使用网格组布局添加控件
add(name,constraints,0,1,1,1);
add(password,constraints,0,2,1,1);
add(nameinput,constraints,2,1,1,1);
add(passwordinput,constraints,2,2,1,1);
add(ok,constraints,0,3,1,1);
add(cancel,constraints,2,3,1,1);
loginFrame.setResizable(false);
loginFrame.setVisible(true);
}
public void add(Component c, GridBagConstraints constraints, int x,
int y, int w, int h)
{
constraints.gridx=x;
constraints.gridy=y;
constraints.gridwidth=w;
constraints.gridheight=h;
add(c,constraints);
}
}
5.CardLayout:
public class MyFrame extends JFrame
{
private JPanel pane = null; // 主要的JPanel,该JPanel的布局管理将被设置成CardLayout
private JPanel p = null; // 放按钮的JPanel
private CardLayout card = null; // CardLayout布局管理器
private JButton button_1 = null; // 上一步
private JButton button_2 = null; // 下一步
private JButton b_1 = null, b_2 = null, b_3 = null; // 三个可直接翻转到JPanel组件的按钮
private JPanel p_1 = null, p_2 = null, p_3 = null; // 要切换的三个JPanel
MyFrame()
{
super("CardLayout Test");
try {
// 将LookAndFeel设置成Windows样式
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
catch (Exception ex)
{
ex.printStackTrace();
}
card = new CardLayout(5, 5); //创建一个具有指定的水平和垂直间隙的新卡片布局
pane = new JPanel(card); // JPanel的布局管理将被设置成CardLayout
p = new JPanel(); // 构造放按钮的JPanel
button_1 = new JButton("< 上一步");
button_2 = new JButton("下一步 >");
b_1 = new JButton("1");
b_2 = new JButton("2");
b_3 = new JButton("3");
b_1.setMargin(new Insets(2,2,2,2));
b_2.setMargin(new Insets(2,2,2,2));
b_3.setMargin(new Insets(2,2,2,2));
p.add(button_1);
p.add(b_1);
p.add(b_2);
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: C 语言高效编程与代码优化
- 下一篇:没有了
copyright © 2008-2019 入门客AI创业平台 版权所有 备案号:湘ICP备2023012770号