入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

Java Swing学习笔记

创建时间:2017-05-06 投稿人: 浏览次数:137
今天开始学习Java Swing,教材选用《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
Swing组件从功能上分为三种类型:
  • 顶级组件(顶级容器,可以独立显示)
    • JFrame、JApplet、JDialog、JWindow
  • 中间组件
    • 中间容器类(可以充当容器,但不能独立显示)
      • JPanel、JScrollPane、JSplitPane、JToolBar
    • 特殊中间组件类(在GUI上起特殊作用的中间层,属于中间容器类,但是能起到美化和专业化的作用)
      • JInternalFrame、JLayeredPane、JRootPane等
  • 基本组件(实现人机交互的组件,只能依附于中间组件才能显示)
    • JButton、JComboBox、JList、JMenu、JSlider、JTextField等
2.Window类
一切图形化的东西必须包括在顶级容器内。Swing中主要有三种可以使用的顶级容器:
  • JFrame(用于设计类似于Windows系统中的窗口程序)
    • 内容面板(ContentPane)
      • 基本组件
    • 菜单条
  • JDialog(用于设计对话框)
  • JApplet(用于设计可以嵌入到网页中的Java程序)
3.添加内容面板到顶级容器
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();

   JLabel label1=new JLabel("label1");
  JLabel label2=new JLabel();
  String name=label1.getText();
  label2.setText(name);

   二、按钮的使用

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而言的。

  1. BorderLayout:东、南、西、北、中;
  2. FlowLayout:按照加入的先后顺序排列,行满换行;从左到右,居中排列;
  3. GridLayout:将空间划分为网状区域;
  4. GriBagLayout:网状划分,功能较GridLayout复杂;
  5. CardLayout:将组件当成卡片,每一只能显示一个。
  6. BoxLayout:通过允许在容器中水平或垂直的方式安排多个组件;
  7. SpringLayout:通过定义组件边沿的关系来实现布局;
  8. 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布局管理器是根据系统的安排来布局。

使用步骤:

  1. 创建GridBagLayout对象;
  2. 将容器设置成为此对象的布局管理器;
  3. 创建约束GridBagConstraints对象;
    1. fill参数用于档组件不能填充单元格时,在各个方向上是否填充;
    2. anchor参数用于当一个组件大于分配给它的单元格时约束缩小该组件;
    3. weightx是设置放大时的增量数字,为0是放大不变;100时放大完全填充;
    4. gridx定义组件左上角的行与列的位置;
    5. gridwidth定义组件所占用的列数
  4. 创建各个相应的组件;
  5. 添加各个组件与约束到网格组布局管理器中。

 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。