`
tylgl
  • 浏览: 55987 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA SWING学习笔记

    博客分类:
  • java
阅读更多
1-1:Swing常用的package
            PACHAGE  |            
         内          容
         
-----------------|--------------------
-----------
           javax.swing                      |        
最常用的pachage,包含了各种swing组件的类
           javax.swing.border               |        
包含与swing组件外框有关的类
           javax..swing.colorchooser        |        
针对swing调色盘组件(JColorChooser)所设计的类
           javax.swing.event                |        
处理由swing组件产生的事件,有别于AWT事件
           javax.swing.filechooser          |        
包含针对swing文件选择对话框(JFileChooser)所设计的类
          ---------------------------------
-------------
           javax.swing.plaf                 |        
处理swing组件外观的相关类
           javax.swing.plaf.basic           |        
           javax.swing.plaf.metal           |        
           javax.swing.plaf.multi           | 
           ---------------------------------
-------------
      
           javax.swing.table                |        
针对swing表格组件(JTable)所设计的类
           ---------------------------------
-------------
           javax.swing.text                 |        
包含与swing文字组件相关的类
           javax.swing.text.html            |
           javax.swing.text.html.parser     |
           javax.swing.text.rtf             |
           ---------------------------------
-------------
           javax.swing.tree                 |        
针对swing树关元件(JTree)所设计的类
           javax.swing.undo                 |        
提供swing文字组件Redo或Undo的功能
1-2:swing的版面结构
   Swing中几乎所有组件都是从JComponent衍生而来,也就是说这些组件都是
lightweight
Component,均由纯java code所编写面成
、Swing中以下几个组件不是由JComponent继承面来:
    JFrame(JRoot Pane)
    JDialog(JRoot Pane)
    JWindow(JRoot Pane)
    JApplet(JRoot Pane)
  以上四个组件是heavyweight Component,必须使用到native
code来画出这四个窗口组件,因为要在操作系统中显示窗口画面,必
须使用操作系统的宣传品资源,面以往的AWT组件大多使用native
code所构造出来,因此Swing中的JFrame便继承原有AWT中的Frame
类,面不是继承JComponent类。同样,JApplet是继承原有AWT中的JApplet类,也不是
继承JComponent类。
   
JFrame、JDialog、JWindow及JApplet这四个组件统称为最上层组件,因为其余的swing
组件都必须依附在此四组件之一上才能
显示出来。此四组件均实现(Implement)RootPaneContainer这个界面(Interface),此界
面定义了各种容器取得与设置并不是真实的容器,它是由Glass
Pane与Layered Pane所组成(Layered Pane里拥有Content Pane与Menu
Bar,而Menu Bar可选择使用或不使用),
我们不能在JRootPane上加入任何的组件,因为它只是一个虚拟的容器,若要在最上层
组件上加入组件,必须加在Layered
Pane或是
Layered Pane里的Content
Pane上。以JFrame为例,一般我们要在JFrame上加入其他组件(如JButton、JLabel等)
必须先取得JFrame
的Content Pane,然后将要加入的组件放在此Content
Pane中,而不是直接就加到JFrame上。因此若要在JFrame中加入一个按钮,不
能像以前AWT时一样写成frame.add(button)的形式,而必须先取得JFrame的Content
Pane,然后将按钮加入Content Pane中,如:
   frame.getContentPane().add(button)
否则在编译的时候将有错误信息产生。

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&
注意:
1.组件必须加在容器中,而容器本身具有层次性的关系,就如同珠宝盒一般,大盒子里
面可以放小盒子,小盒子里面还可以放更小的盒子,而珠宝就可以放在某一个盒子中,
这里的珠宝就代表组件,盒子就代表容器。因此若您想在JFrame加入任何组件时,必须
先取得JFrame的容器来放置这些组件,而由于JFrame、JDialog、JWindow与JApplet是
显示Swing组件的源头,我们可以称它们为根
组件,也就是所谓的最上层组件。
2.RootPaneContainer它是一个interface,共有5个类实现(Implement)它,分别是
JFrame、JAppleet、JWindow、JDialog、
JInternalFrame,其中JInternalFrame是一个lightweight
Component,它不是一个最上层组件,也就是说JInternalFrame不能单独显示出来,必须
依附在最上层组件中,我们将在下面讨论组件,而JFrame,JApplet,JWindow,JDialog均
为最上层组件。

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&
RootPaneContainer定义了下面几种方法:
    方法
  Container       getContentPane()返回contentPane
  Component       getGlassPane()返回glassPane
  JLayeredPane    getLayeredPane()返回layeredPane
  JRootPane       getRootPane返回属于这个组件的JRootPane
  Void            setContentPane(Container
contentpane)设置ContentPane
  Void            setGlassPane(Component
glassPane)设置GlassPane
  Void            setLayeredPane(JLayeredPane
layeredPane)设置LayeredPane
JFrame如何取得Content Pane的实际流程,下面是一段很简单的程序代码:
  public class Simple{
    Simple(){
       JFrame frame=new JFrame();
       Container contentPane=frame.getContentPane();
       JButton button=new JButton();
       contentPane.add(button);
    }
  }
当我们写frame.getContentPane()时,会返回此frame的Content
Pane,也就是一个容器组件,有了容器之后我们才能将button组件
摆进去,此时JFrame才算拥有button组件。所以JFrame就好像是一块空地,要在这空地
上信人应该先盖一栋房子(容器),然后人
、家具、设备等等(组件)就能搬进此房子中。下面的层次结构说明了最上层组件都含
有JRootPane组件,JRootPane本身就含有容
器组件,可让最上层组件装入其他的组件。
      |Frame------JFrame(JRoot Pane)
      |
Window|Dialog-----JDialog(JRoot Pane)
      |
      |
      |-----------JWindow(JRoot Pane)
Applet -----------JApplet(JRoot Pane)
图示:
         |Grass Pane
         |
Root Pane|
         |            |Content Pane
         |Layered Pane|
                      |Menu Bar
1-3:版面管理器(Layout Menager)
         |BorderLayout
         |FlowLayout
         |GridLayout
  AWT----|CardLayout
         |GridBagLayout
  Swing--|BoxLayout
1-3-1:BorderLayout的使用:
   BorderLayout的类层次结构图:
       java.lang.Object
        --java.awt.BorderLayout
   构造函数:BorderLayout()建立一个没有间距的border layout
             BorderLayout(int hgap,int
vgap)建立一个组件间有间距的border layout
  BorderLayout将版面划分为东、西、南、北、中
例子:BorderLayoutDemo.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BorderLayoutDemo{
   public BorderLayoutDemo(){
     JFrame f=new JFrame();
        Container contentPane=f.getContentPane();
        contentPane.setLayout(new BorderLayout());
        contentPane.add(new
JButton("EAST"),BorderLayout.EAST);
        contentPane.add(new
JButton("WEST"),BorderLayout.WEST);
        contentPane.add(new
JButton("SOUTH"),BorderLayout.SOUTH);
        contentPane.add(new
JButton("NORTH"),BorderLayout.NORTH);
        contentPane.add(new
JLabel("CENTER",JLabel.CENTER),BorderLayout.CENTER);
        f.setTitle("BorderLayout");
        f.pack();
        f.setVisible(true);
        /***read**/
        /*处理关闭窗口的操作,若你没写这一段,就算你已经关闭窗口了,但程序并
不会终止。
         */
        f.addWindowListener(
           new WindowAdapter(){
               public void windowClosing(WindowEvent e){
                  System.exit(0);
               }
           }
        );
       /***read**/
   }
   public static void main(String[] args){
     BorderLayoutDemo b=new BorderLayoutDemo();
   }
}
  
设置组件的间距,你可以使用有间距参数的BorderLayout构造函数,也可以利用
BorderLayout的setHgap(int
hgap)与
   setVgap(int vgap)两个方法来达成。
1-3-2:FlowLayout的使用:
   FlowLayout的类层次结构图:
       java.lang.Object
        --java.awt.FlowLayout
   构造函数:FlowLayout()建立一个新的Flow
Layout,此FlowLayout默认值是居中对齐,组件彼此有5单位的水平与垂直间距。
             FlowLayout(int align)建立一个新的Flow
Layout,此FlowLayout可设置排列方式,组件彼此有5单位的水平与垂直
          间距。
             FlowLayout(int align,int hgap,int
vgap)建立一个新的Flow Layout,此FlowLayout可设置排列方式与组件间距。
FlowLayoutDemo.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FlowLayoutDemo{
   public FlowLayoutDemo(){
    JFrame f=new JFrame();
       Container contentPane=f.getContentPane();
       /*你可以使用有间距的FlowLayout构造函数,使FlowLayout的排列具有间距,并
        *并可利用排列方向参数来指定靠什么方向排列,FlowLayout共有五种排列方
式,
       
*依次是CENTER(默认值),LEFT,RIGHT,LEADING,TRAILING,若我们将下面程序第13
        *行改成contentPane.setLayout(new
FlowLayout(FlowLayout.LEFT));
        */
       contentPane.setLayout(new FlowLayout());      
       contentPane.add(new JButton("first"));
       contentPane.add(new JButton("second"));
       contentPane.add(new JButton("third"));
       contentPane.add(new JButton("fourth"));
       contentPane.add(new JButton("fifth"));
       contentPane.add(new JButton("Last"));
      
       f.setTitle("FlowLayout");
       file://f.pack();//必须将f.pach()去掉,否则setSize功能将没有作用
       f.setSize(400,220);
       f.setVisible(true);
        f.addWindowListener(
           new WindowAdapter(){
               public void windowClosing(WindowEvent e){
                  System.exit(0);
               }
           }
        );
   }
   public static void main(String[] args){
     FlowLayoutDemo b=new FlowLayoutDemo();
   }
}
1-3-3:GridLayout的使用:
       GridLayout的类层次结构图:
       java.lang.Object
        --java.awt.GridLayout
   
GridLayout比FlowLayout多了行和列的设置,也就是说你要先设置GridLayout共有几行
几列,就如同二维平面一般,然后你加
进去的组件会先填第一行的格子,然后再从第二行开始填,依此类扒,就像是一个个的
格子一般。而且GridLayout会将所填进去组
件的大小设为一样。
构造函数:GridLayout()建立一个新的GridLayout,默认值是1行1列。
          GridLayout(int rows,int
cols)建立一个几行几列的GridLayout.
          GridLayout(int rows,int cols, int hgap,int
vgap)建立一个几行几列的GridLayout,并设置组件的间距。
例子:GridLayoutDemo.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CardLayoutDemo implements ActionListener{
  JPanel p1,p2,p3,p4;
  int i=1;
  JFrame f;
  public CardLayoutDemo(){
    f=new JFrame();//当做top-level组件
      Container contentPane=f.getContentPane();
      contentPane.setLayout(new GridLayout(2,1));
     
      p1=new JPanel();
      Button b=new Button("Change Card");
      b.addActionListener(this);//当按下"Change
Card"时,进行事件监听,将会有系统操作产生。
      p1.add(b);                file://处理操作在52-64行.
      contentPane.add(p1);
     
      p2=new JPanel();
      p2.setLayout(new FlowLayout());
      p2.add(new JButton("first"));
      p2.add(new JButton("second"));
      p2.add(new JButton("third"));
     
      p3=new JPanel();
      p3.setLayout(new GridLayout(3,1));
      p3.add(new JButton("fourth"));
      p3.add(new JButton("fifth"));
      p3.add(new JButton("This is the last button"));
     
      p4=new JPanel();
      p4.setLayout(new CardLayout());
      p4.add("one",p2);
      p4.add("two",p3);
      /*要显示CardLayout的卡片,除了用show(Container parent,String
name)这个方法外
      
*,也可试试first(Container),next(Container),previous(Container),last
(Container)这
       *四个方法,一样可以达到显示效果。
       */
      ((CardLayout)p4.getLayout()).show(p4,"one");
     
      contentPane.add(p4);
     
      f.setTitle("CardLayout");
      f.pack();
      f.setVisible(true);
     
      f.addWindowListener(
           new WindowAdapter(){
               public void windowClosing(WindowEvent e){
                  System.exit(0);
               }
           }
      );
     
  }
  public void actionPerformed(ActionEvent event){
     switch(i){
        case 1:
             ((CardLayout)p4.getLayout()).show(p4,"two");
             break;
        case 2:
             ((CardLayout)p4.getLayout()).show(p4,"one");
             break;
     }
     i++;
     if (i==3) i=1;
     f.validate();
  }
  public static void main(String[] args){
   new CardLayoutDemo();
  }
}
1-3-5:GridBagLayout的使用:是java中最有弹性但也是最复杂的一种版面管理器。它
只有一种构造函数,但必须配合
    GridBagConstraints才能达到设置的效果。
    GridBagLayout的类层次结构图:
    java.lang.Object
     --java.awt.GridBagLayout
构造函数:
    GirdBagLayout()建立一个新的GridBagLayout管理器。
    GridBagConstraints()建立一个新的GridBagConstraints对象。
    GridBagConstraints(int gridx,int gridy,int
gridwidth,int gridheight,double weightx,double weighty,
                       int anchor,int fill, Insets
insets,int ipadx,int ipady)建立一个新的GridBagConstraints对象
                      ,并指定其参数的值。
参数说明:
gridx,gridy:设置组件的位置,gridx设置为GridBagConstraints.RELATIVE代表此组件
位于之前所加入组件的右边。
            
若将gridy设置为GridBagConstraints.RELATIVE代表此组件位于以前所加入组件的下
面。建议定义出
            
gridx,gridy的位置,以便以后维护程序。表示放在几行几列,gridx=0,gridy=0时放在
0行0列。
gridwidth,gridheight:用来设置组件所占的单位长度与高度,默认值皆为1。你可以使
用GridBagConstraints.REMAINDER常
                      量,代表此组件为此行或此列的最后一个组件,而且会占据所
有剩余的空间。
weightx,weighty:用来设置窗口变大时,各组件跟着变大的比例,当数字越大,表示组
件能得到更多的空间,默认值皆为0。
anchor:        
当组件空间大于组件本身时,要将组件置于何处,有CENTER(默认值)、NORTH、
NORTHEAST、EAST、SOUTHEAST、
                 WEST、NORTHWEST可供选择。
insets:设置组件之间彼此的间距,它有四个参数,分别是上,左,下,右,默认为
(0,0,0,0).
ipadx,ipady:设置组件内的间距,默认值为0。             
  
我们以前提过,GridBagLayout里的各种设置都必须通过GridBagConstraints,因此当我
们将GridBagConstraints的参数都设置
好了之后,必须new一个GridBagConstraints的对象出来,以便GridBagLayout使用。
例子:
GridBagLayoutDemo.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GridBagLayoutDemo{
   public GridBagLayoutDemo(){
    JButton b;
    GridBagConstraints c;
    int
gridx,gridy,gridwidth,gridheight,anchor,fill,ipadx,ipady;
    double weightx,weighty;
    Insets inset;
   
    JFrame f=new JFrame();
    GridBagLayout gridbag=new GridBagLayout();
      Container contentPane=f.getContentPane();
      contentPane.setLayout(gridbag);
     
      b=new JButton("first");
      gridx=0;
      gridy=0;
      gridwidth=1;
      gridheight=1;
      weightx=10;
      weighty=1;
      anchor=GridBagConstraints.CENTER;
      fill=GridBagConstraints.HORIZONTAL;
      inset=new Insets(0,0,0,0);
      ipadx=0;
      ipady=0;
      c=new
GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
         fill,inset,ipadx,ipady);
      gridbag.setConstraints(b,c);
      contentPane.add(b);
     
     
      b=new JButton("second");
      gridx=1;
      gridy=0;
      gridwidth=2;
      gridheight=1;
      weightx=1;
      weighty=1;
      anchor=GridBagConstraints.CENTER;
      fill=GridBagConstraints.HORIZONTAL;
      inset=new Insets(0,0,0,0);
      ipadx=50;
      ipady=0;
      c=new
GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
         fill,inset,ipadx,ipady);
      gridbag.setConstraints(b,c);
      contentPane.add(b);
      b=new JButton("third");
      gridx=0;
      gridy=1;
      gridwidth=1;
      gridheight=1;
      weightx=1;
      weighty=1;
      anchor=GridBagConstraints.CENTER;
      fill=GridBagConstraints.HORIZONTAL;
      inset=new Insets(0,0,0,0);
      ipadx=0;
      ipady=50;
      c=new
GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
         fill,inset,ipadx,ipady);
      gridbag.setConstraints(b,c);
      contentPane.add(b);
     
      b=new JButton("fourth");
      gridx=1;
      gridy=1;
      gridwidth=1;
      gridheight=1;
      weightx=1;
      weighty=1;
      anchor=GridBagConstraints.CENTER;
      fill=GridBagConstraints.HORIZONTAL;
      inset=new Insets(0,0,0,0);
      ipadx=0;
      ipady=0;
      c=new
GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
         fill,inset,ipadx,ipady);
      gridbag.setConstraints(b,c);
      contentPane.add(b);
      b=new JButton("This is the last button");
      gridx=2;
      gridy=1;
      gridwidth=1;
      gridheight=2;
      weightx=1;
      weighty=1;
      anchor=GridBagConstraints.CENTER;
      fill=GridBagConstraints.HORIZONTAL;
      inset=new Insets(0,0,0,0);
      ipadx=0;
      ipady=50;
      c=new
GridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anchor,
         fill,inset,ipadx,ipady);
      gridbag.setConstraints(b,c);
      contentPane.add(b);
      f.setTitle("GridBagLayout");
      f.pack();
      f.setVisible(true);
      f.addWindowListener(
           new WindowAdapter(){
               public void windowClosing(WindowEvent e){
                  System.exit(0);
               }
           }
      );     
   }
   public static void main(String[] args){
    new GridBagLayoutDemo();
   }
}
分享到:
评论

相关推荐

    Java swing 知识总结学习笔记

    ### Java Swing 知识总结学习笔记 #### 一、Swing 概述 Swing 是一个用于构建桌面应用程序的 Java 图形用户界面 (GUI) 工具包,它基于 Java Abstract Window Toolkit (AWT) 构建而成。Swing 提供了更丰富的组件集...

    java学习笔记之一Swing

    ### Java Swing 学习笔记详解 #### 一、引言 在Java图形用户界面(GUI)编程领域,Swing 是一个强大的工具包,用于构建功能丰富且美观的应用程序界面。与早期的 AWT(Abstract Window Toolkit)相比,Swing 提供了...

    Java入门学习笔记

    这份"Java入门学习笔记"涵盖了imooc网站上Java入门课程的三个赛季的内容,旨在为初学者提供一个全面的学习资源。 笔记的第一部分是"Java入门第一季学习笔记",它可能包括Java的基础概念和语法。这部分可能会讲解...

    Java Swing组件:Jlist学习笔记

    ### Java Swing 组件:JList 学习笔记 #### JList 概述 JList 是 Java Swing 中的一个重要组件,用于展示列表项。它能够帮助开发者实现数据的动态展示、编辑以及选择等功能,广泛应用于各种桌面应用软件界面设计中...

    Swing学习系列 -- Swing读书笔记目录

    Swing学习系列是Java开发中的一个重要部分,它是一种用于构建桌面应用程序的图形用户界面(GUI)工具包。这篇Swing读书笔记目录旨在帮助开发者更好地理解和掌握Swing的相关知识,通过阅读和学习,可以提升在Java GUI...

    Java 学习笔记Java学习笔记

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。...Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。

    韩顺平编写的java学习笔记(全)

    ### 韩顺平编写的Java学习笔记概览 #### Java平台分类与运行机制 - **J2SE(Java 2 Platform, Standard Edition)**: 标准版Java开发平台,适用于桌面应用程序开发。 - **J2EE(Java 2 Platform, Enterprise ...

    Java学习笔记(源码)

    【Java学习笔记(源码)】是一份详细记录了Java编程语言学习过程的资源集合,包含实际的源代码示例。这份笔记旨在帮助初学者和有一定经验的开发者深入理解和掌握Java语言的核心概念、语法以及常见应用。以下是笔记中...

    java gui学习笔记

    在"java gui学习笔记"中,我们主要关注两个核心概念:组件(Components)和事件处理(Event Handling)。 首先,GUI界面设计通常涉及各种组件,如按钮(Buttons)、菜单项(MenuItems)、文本字段(TextFields)等...

    JAVA学习笔记swing JFrame窗口学习.rar_it_java swing_jframe_jframe mwc

    在Java编程语言中,Swing库是...在学习过程中,参考“JAVA学习笔记swing JFrame窗口学习.txt”文档将有助于深入理解这一主题。同时,“www.pudn.com.txt”可能提供了更多相关的学习资源和示例代码,可供进一步研究。

    Java学习笔记PPT

    这份"Java学习笔记PPT"是针对Java2版本的学习资源,旨在帮助初学者或有一定基础的开发者深入理解Java的核心概念和应用。 在Java学习的初期,掌握基本语法是至关重要的。Java的语法与C++有诸多相似之处,但更加强调...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记是为Java初学者量身定制的一份宝贵资料,它涵盖了Java编程的基础概念、语法以及核心特性。这份PPT简体版旨在帮助读者快速掌握Java开发的基本技能,逐步成为一名合格的Java程序员。 Java JDK...

    良葛格JAVA 学习笔记

    《良葛格JAVA 学习笔记》是由知名IT专家林信良,网名“良葛格”,在台湾大学电机工程学系的深厚学术背景基础上,结合其作为SUN教育训练中心讲师的丰富教学经验编写的。他的著作还包括《Spring 技术手册》,并且他...

    Java专题学习笔记

    Java专题学习笔记主要涵盖了Java语言的核心概念、进阶特性以及实际应用中的问题解析。这份笔记是结合了讲师的讲解和个人的整理,旨在为热爱Java编程的朋友们提供丰富的学习资源。以下将详细介绍其中可能包含的知识点...

    JAVA6学习笔记 最新版的

    Java 6学习笔记是针对初学者和有一定经验的开发者提供的一份全面的教育资源,它涵盖了Java编程语言的基础到高级概念。这份笔记旨在帮助读者深入理解Java 6的关键特性,提高编程技能,并为实际项目开发打下坚实基础。...

    JAVA学习笔记————————

    在深入探讨JAVA学习笔记之前,我们首先理解一下JAVA这一编程语言的重要性。JAVA,由Sun Microsystems公司(现已被Oracle收购)于1995年推出,是一种面向对象的、跨平台的编程语言,以其“一次编写,到处运行”的特性...

    Java JDK 6学习笔记.zip

    这个压缩包“Java JDK 6学习笔记.zip”显然是一个包含有关Java JDK 6深入学习资源的集合,可能是PDF文档、笔记或者其他形式的教学材料。 在Java JDK 6中,有几个关键的特性值得我们关注: 1. **改进的性能**:JDK ...

    JAVA学习笔记和例子程序值得看看

    这份"JAVA学习笔记和例子程序值得看看"的压缩包显然包含了作者在深入学习Java过程中的重要发现和理解,以及帮助深化概念理解的示例程序。让我们来详细探讨一下可能包含的知识点。 1. **基础语法**:Java的基础包括...

Global site tag (gtag.js) - Google Analytics