Swing组件的各种面板(JRootPane根面板,JLayeredPane层面板等)
Swing类组件大全

Swing类组件大全
==几个重要的类-==
JComponent 类,所有以下组件的父类
JFrame类,创建窗体
JApplet类,创建小型应用程序(好像是适配器吧)
==窗口组件===
JButton ,Jlabel, JCheckBox 可以直接添加Icon图片,Jlist不可直接添加
JLabel标签
JButton 按钮监视器addActionListener()
JList滚动列表监视器addItemListener()和addActionListener() JTxtFiled文本框监视器addActionListener()
JPasswordFiled密码框监视器addActionListener()
JTxtArea文本域监视器addTextListener()
JCheckBox复选框监视器addItemListener()
JComboBox下拉列表监视器addItemListener()
单选按钮组,把单选钮添加到一个单选组里,那么这些单选钮只有一个能被选上
ButtonGroup l=new ButtonGroup();
JRadioButton q=new JRadioButton("fsd",true);
l.add(q);
c.add(q);
JTable表格
JFileChooser文件选择器
JProgressBar进度条
JMenuBar菜单栏
JMenu条JMenuItem项JToolBar工具条
JTree树
===中间容器==== JPanel面板JScrollPane滚动窗格JSplitPane拆分窗格JInternalFrame内部窗体。
Swing学习指南

Swing学习指南本文档意在将那些想学习swing的盆友引入swing的殿堂,至于swing的高深部分,还需自己不断努力。
(书上有路勤为径…)1、JFrame、JPanel、JDialog的学习使用1.1、JFrameSwing 的三个基本构造块:标签、按钮和文本字段;但是现在需要个地方安放它们,并希望用户知道如何处理它们。
JFrame 类就是解决这个问题的——它是一个容器,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。
JFrame 实际上不仅仅让程序员把组件放入其中并呈现给用户。
比起它表面上的简单性,它实际上是Swing 包中最复杂的组件。
为了最大程度地简化组件,在独立于操作系统的Swing 组件与实际运行这些组件的操作系统之间,JFrame 起着桥梁的作用。
JFrame 在本机操作系统中是以窗口的形式注册的,这么做之后,就可以得到许多熟悉的操作系统窗口的特性:最小化/最大化、改变大小、移动。
1.2、JPanleJPanel 是一般轻量级容器.JPanel 为javax.swing包中的,为面板容器,可以加入到JFrame中, 它自身是个容器,可以把其他compont加入到JPanel中,如JButton,JTextArea,JTextFiled等,另外也可以在它上面绘图1.3、JDialog对话框与框架(JFrame)有一些相似,但它一般是一个临时的窗口,主要用于显示提示信息或接受用户输入。
所以,在对话框中一般不需要菜单条,也不需要改变窗口大小。
此外,在对话框出现时,可以设定禁止其他窗口的输入,直到这个对话框被关闭1.4、笔者自己对于三者关系的理解(没准有一定参考价值)笔者不擅长理论知识,决定以生动的例子进行讲解。
比如我制作一个窗户,首先我需要一面墙,因为窗户应该放在墙上嘛(不要跟我说天花板也可以放窗户,严肃…),那么这堵墙就相当于一个JFrame容器,我把墙做出来JFrame frame = new JFrame();然后我需要在这面墙上放个窗户,先把窗户做出来(虽然现实里这个做窗户不可科学,不过是例子,意思传达到了就好了),JPanel panel = new JPanel();把窗户放墙上,frame.add(panel);这样就OK了,对于JDialog 就相当于打开窗户看到的新的墙。
javaSwing

javaSwingSwingSwing是⼀个⽤于Java GUI编程的⼯具包;Java可以⽤于开发带界⾯的PC软件。
AWTSwing是基于AWT开发出的框架,AWT是最早的抽象窗⼝⼯具Swing容器容器是⽤来组织、管理和显⽰其他组件的Swing中容器可以分为两类:1. 顶层容器:是任何图形界⾯程序都要涉及的主窗⼝,是显⽰并继承组件的容器组件。
在Swing中有三种顶层容器,分别是:JFrame(带有边框、标题、关闭和最⼩化的窗⼝)、JDialog(⽤于对话类的类)和JApplet(⽤于使⽤Swing组件的Java Applet类)。
2. 中间容器:可以承载其他组件,但中间容器不能独⽴显⽰,必须依附于其他的顶层容器。
常见的中间容器:JPanel(表⽰⼀个普通⾯板,是最灵活、最常⽤的中间容器)、JScrollPane(于JPanel类似,但它可在⼤的组件周围提供滚动条)、JTabbedPane(表⽰选项卡⾯板,可以包含多个组件,但⼀次只显⽰⼀个组件,⽤户可在组件之间⽅便地切换)和JToolBar(表⽰⼯具栏,按⾏或列排列⼀组组件通常是按钮)在Java程序中容器类都是继承⾃Container类在Swing中,任何其他组件都必须位于⼀个顶层容器中JFrame窗⼝和JPanel⾯板是最常⽤的顶层容器JFrame窗⼝常⽤构造⽅法:JFrame():构造⼀个初始时不可见的新窗体JFrame(String title):创建⼀个具有 title 指定标题的不可见新窗体当使⽤布局管理器时⽤setPreferredSize()和setMinimumSize()等当不⽤布局管理器时⽤setSize()和setBounds()。
tp14swing组件

进度条JProgressBar
2. 常用方法
方法
int getMaximum() int getMaximum() int getOrientation()
double getPercentComplete() String getString() int getValue() boolean isStringPainted() void setMaximum(int max) void setMinimum(int min) void setOrientation(int direct)
| +--javax.swing.JProgressBar 1. 构造函数 格式:JProgressBar () 功能:建立一个水平方向的进度条JProgressBar对象,其变化范围是0到100。 格式:JProgressBar (int direct) 功能:建立一个方向为direct的进度条JProgressBar对象,其变化范围是0到100。 格式:JProgressBar (int min,int max) 功能:建立一个水平方向的进度条JProgressBar对象,其范围是min到max。 格式:JProgressBar (int direct ,int min,int max) 功能:建一个方向为direct的进度条JProgressBar对象,其范围是min到max。
JComboBox jcb=new JComboBox (stu); 这就创建了一个下拉列表框jcb,其初始数据有4项,分别为:“王小平”,”刘
国军”,”吴芬”,”李建军”。 2.常用方法
下拉列表框JComboBox
方法
void addItem(Object itm) void insertItemAt(Object itm,int idx) void removeItemAt(int idx) void removeItem(Object itm) void removeAllItems() Object getItemAt(int idx) int getItemCount() int getSelectedI次关系为: ng.Object | +ponent
JAVAswing-常用组件

JAVAswing-常⽤组件在图形⽤户界⾯编程中,我们常常会提供⽤户登陆界⾯,⽐如登陆到会员管理系统、登陆到⼯资管理系统、仓库管理系统...常⽤组件Ⅰ.⽂本框(JTextField)Ⅱ.密码框(JPasswordField)Ⅲ.标签(JLable)Ⅳ.复选框(JCheckBox)Ⅴ.单选框(JRadioButton)Ⅵ.组合单选框(ButtonGroup)Ⅶ.下拉框(JComboBox)Ⅷ.列表(JList)Ⅸ.滚动窗格组件(JScrollPane)Ⅹ.多⾏⽂本框(JTextArea)ⅩⅠ.选项卡(JTabbedPane)实例简单会员管理系统登录界⾯1/*2 * 作者:⽩客C3 * 时间:2020年03⽉05⽇4 * 内容:gui窗体5 * 步骤:6 * 1.继承JFrame容器7 * 2.定义需要的组件8 * 3.创建组件9 * 4.设置布局管理器10 * 5.添加组件11 * 6.对窗体设置12 * 7.显⽰窗体13*/1415package com.beekc.www;16import java.awt.*;17import javax.swing.*;1819//继承JFrame20public class Beekc extends JFrame{2122//定义组件23 JPanel jPanel1,jPanel2,jPanel3;24 JLabel jlb1,jlb2;25 JTextField jt;26 JPasswordField jpssswd;27 JButton jb1,jb2;2829public static void main(String[] args){30 Beekc beekc = new Beekc();31 }3233public Beekc(){34//创建组件35 jPanel1 = new JPanel();36 jPanel2 = new JPanel();37 jPanel3 = new JPanel();3839 jlb1 = new JLabel("⽤户");40 jlb2 = new JLabel("密码");41 jt = new JTextField(10);42 jpssswd = new JPasswordField(10);43 jb1 = new JButton("登录");44 jb2 = new JButton("注册");4546//设置布局管理器47this.setLayout(new GridLayout(3,1));48//添加JPanel49 jPanel1.add(jlb1);50 jPanel1.add(jt);51 jPanel2.add(jlb2);52 jPanel2.add(jpssswd);53 jPanel3.add(jb1);54 jPanel3.add(jb2);55//JPanel添加到JFanel56this.add(jPanel1);57this.add(jPanel2);58this.add(jPanel3);5960//窗体设置61this.setTitle("会员管理系统");62this.setSize(270,150);63this.setResizable(false);64this.setLocation(200,200);65this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);6667//显⽰68this.setVisible(true);6970 }7172 }⽤户注册界⾯1/*2 * 作者:⽩客C3 * 时间:2020年03⽉06⽇4 * 内容:gui窗体5 * 步骤:6 * 1.继承JFrame容器7 * 2.定义需要的组件8 * 3.创建组件9 * 4.设置布局管理器10 * 5.添加组件11 * 6.对窗体设置12 * 7.显⽰窗体13*/1415package com.beekc.www;161718import javax.swing.*;19import java.awt.*;2021//继承JFrame22public class Beekc extends JFrame {2324//定义组件25 JPanel jPanel1,jPanel2,jPanel3;26 JLabel jlb1,jlb2;27 JCheckBox jc1,jc2,jc3;28 JRadioButton jrb1,jrb2;29 ButtonGroup bg;30 JButton jb1,jb2;3132public static void main(String[] args){33 Beekc beekc = new Beekc();34 }3536//构造函数37public Beekc(){38//创建组件39 jPanel1 =new JPanel();40 jPanel2 =new JPanel();41 jPanel3 =new JPanel();42 bg = new ButtonGroup();4344 jlb1 = new JLabel("你喜欢的运动");45 jlb2 = new JLabel("性别");46 jc1 =new JCheckBox("⾜球");47 jc2 =new JCheckBox("篮球");48 jc3 =new JCheckBox("排球");49 jrb1 = new JRadioButton("男");50 jrb2 = new JRadioButton("⼥");51 jb1 = new JButton("注册");52 jb2 = new JButton("取消");5354//设置布局管理器5556//JRadioButton添加ButtonGroup为⼀组57 bg.add(jrb1);58 bg.add(jrb2);5960//组件加到JPanel61 jPanel1.add(jlb1);62 jPanel1.add(jc1);63 jPanel1.add(jc2);64 jPanel1.add(jc3);65 jPanel2.add(jlb2);66 jPanel2.add(jrb1);67 jPanel2.add(jrb2);68 jPanel3.add(jb1);69 jPanel3.add(jb2);70//布局71this.setLayout(new GridLayout(3,1));7273//添加组件74this.add(jPanel1);75this.add(jPanel2);76this.add(jPanel3);7778//对窗体设置79this.setTitle("⽤户注册");80this.setSize(270,150);81this.setResizable(false);82this.setLocation(200,200);83this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 8485//显⽰86this.setVisible(true);878889 }9091 }⽤户调查界⾯1/*2 * 作者:⽩客C3 * 时间:2020年03⽉06⽇4 * 内容:gui窗体5 * 步骤:6 * 1.继承JFrame容器7 * 2.定义需要的组件8 * 3.创建组件9 * 4.设置布局管理器10 * 5.添加组件11 * 6.对窗体设置12 * 7.显⽰窗体13*/1415package com.beekc.www;16import java.awt.*;17import javax.swing.*;1819//继承JFrame20public class Beekc extends JFrame{2122//定义组件23 JPanel jPanel1,jPanel2;24 JLabel jlb1,jlb2;25 JComboBox jcb;26 JList jl;27 JScrollPane jsp;2829public static void main(String[] args){30 Beekc beekc = new Beekc();31 }3233//构造函数34public Beekc(){35//创建组件36 jPanel1 = new JPanel();37 jPanel2 = new JPanel();38 jlb1 = new JLabel("籍贯");39 jlb2 = new JLabel("旅游地⽅");4041 String[] strJComboBox = {"北京","天津","⼴东"};42 jcb = new JComboBox(strJComboBox);4344 String[] strJLIst = {"故宫","天安门","长城","颐和园"};45 jl = new JList(strJLIst);46//设置显⽰多少个47 jl.setVisibleRowCount(3);48 jsp = new JScrollPane(jl);4950//设置布局管理器51//添加到JPanel52 jPanel1.add(jlb1);53 jPanel1.add(jcb);54 jPanel2.add(jlb2);55 jPanel2.add(jsp);5657this.setLayout(new GridLayout(1,2));5859//添加组件60this.add(jPanel1);61this.add(jPanel2);6263//对窗体设置64this.setTitle("⽤户调查");65this.setSize(270,110);66this.setResizable(false);67this.setLocation(200,200);68this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 6970//显⽰71this.setVisible(true);72 }7374 }翻译软件界⾯1/*2 * 作者:⽩客C3 * 时间:2020年03⽉06⽇4 * 内容:gui窗体5 * 步骤:6 * 1.继承JFrame容器7 * 2.定义需要的组件8 * 3.创建组件9 * 4.设置布局管理器10 * 5.添加组件11 * 6.对窗体设置12 * 7.显⽰窗体13*/1415package com.beekc.www;16import java.awt.*;17import javax.swing.*;1819//继承JFrame20public class Beekc extends JFrame{2122//定义组件23 JSplitPane jsp;24 JList jList;25 JLabel jl1;2627public static void main(String[] args){28 Beekc beekc = new Beekc();29 }3031//构造函数32public Beekc(){33//创建组件34 String[] words = {"bird","boy","girl"};35 jList =new JList(words);36//new ImageIcon,存放图⽚37 jl1 = new JLabel(new ImageIcon("images/jinshanciba.png"));38//拆分窗体39 jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,jList,jl1); 40//可以收缩41 jsp.setOneTouchExpandable(true);4243//设置布局管理器4445//添加组件46this.add(jsp);4748//窗体设置49this.setTitle("⾕歌翻译");50this.setSize(760,480);51this.setLocation(200,200);52this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);5354//显⽰55this.setVisible(true);56 }57 }聊天界⾯1/*2 * 作者:⽩客C3 * 时间:2020年03⽉06⽇4 * 内容:gui窗体5 * 步骤:6 * 1.继承JFrame容器7 * 2.定义需要的组件8 * 3.创建组件9 * 4.设置布局管理器10 * 5.添加组件11 * 6.对窗体设置12 * 7.显⽰窗体13*/1415package com.beekc.www;16import java.awt.*;17import javax.swing.*;1819//继承JFrame20public class Beekc extends JFrame{2122//定义组件23 JTextArea jTextArea;24 JScrollPane jScrollPane;25 JPanel jPanel;26 JTextField jTextField;27 JButton jButton;2829public static void main(String[] args){30 Beekc beekc = new Beekc();31 }3233//构造函数34public Beekc(){35//创建组件36 jTextArea = new JTextArea();37 jScrollPane = new JScrollPane(jTextArea);3839 jPanel = new JPanel();40 jTextField = new JTextField(20);41 jButton = new JButton("发送");4243//设置布局管理器44//添加到JPanel45 jPanel.add(jTextField);46 jPanel.add(jButton);4748//添加组件49this.add(jScrollPane);50this.add(jPanel,BorderLayout.SOUTH);5152//窗体设置53this.setTitle("聊天界⾯");54this.setIconImage((new ImageIcon("images\\qq.png")).getImage()); 55this.setSize(320,270);56this.setLocation(200,200);57this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);5859//显⽰60this.setVisible(true);61 }6263 }聊天登录界⾯。
Swing组件的各种面板(JRootPane根面板,JLayeredPane层面板等)

主要参考文现:[美]Herbert Schildt 著 鄢爱兰 鹿江春译 《java 参考大全 J2SE 》 清华大学出版社 2006年1月孙卫琴 《Java 面向对象编程》 出版社及日期不详java API 开发人员文档本文作者:黄邦勇帅本文的说明:本文主要讲解了对大学初学Swing 时对根面板JRootPane ,内容面板containPane ,层面板JLayeredPane ,玻璃面板glassPnae 的困惑,本文对各种面板作了详尽的讨论,让读者能真正的明白根面板,内容面板,层面板到底是什么,他们在程序中的作用,以及他们之间的关系,透明性,可见性,作了讲解。
本文内容完全属于个人见解与参考文现的作者无关,其中难免有误解之处,望指出更正。
Swing 组件的各种面板(JRootPane 根面板,JLayeredPane 层面板等)第一部分:JFrame 中各面板间的关系,透明性与可见性问题注:在某些地方把面板也叫做窗格,比如根面板,也叫根窗格,层面板也叫分层窗格等。
注意窗格与窗体是不一样的。
在Swing 中的JFrame 窗体与AWT 中的Frame 窗体有一些不同。
JFrame 由他的窗体本身加上其上的JRootPane 根面板,JLayeredPane 层面板,containPane 内容面板,glassPane 玻璃面板,JMenuBar 菜单栏(可选,不包括在内)四部分组成。
其中根面板在JRootPane 类中实现,层面板在JLayeredPane 类中实现,他们都是JComponent 的子类。
而containPane 和glassPane 没有专门对应的类。
1、各种面板(或称窗格)的关系及作用:JRootPane 根面板:该面板是在JFrame 窗体创建时就默认添加进来的,是所有其他面板的载体或父级,他覆盖窗体的除标题栏和边条之外的整个表面。
根面板默认是不可见的。
根面板负责管理其他面板(层面板,玻璃面板),如使其他面板覆盖整个JFrame 窗体等。
Swing学习笔记1-----Swing组件类的层次

Swing学习笔记1-----Swing组件类的层次1. 从结构上划分Swing 组件类分为两种,⼀种是JComponent类,⼀种是Windows类.其中windows类包含的是⼀些可以独⽴显⽰的组件,⽽JComponent类包含的是不可以独⽴显⽰的组件.什么是可独⽴显⽰的组件和不可独⽴显⽰的组件?可独⽴显⽰的组件:当运⾏⼀个程序时,可独⽴显⽰的组件⽆需在其他组件上即可显⽰,即它可以直接显⽰出来,例如JFrame类.不可独⽴显⽰的组件:运⾏时,必须依靠可独⽴显⽰的组件才能将其显⽰出来,如JLabel类,JButton类,得托付在类似于JFrame类上才能显⽰出来.2.从功能上划分从功能上划分分为:顶层组件,中间组件和基本组件.顶层容器:JFrame,JDialog,JApplet,JWindow.所谓的顶层容器,也就是之前讲的Window组件,是可以独⽴显⽰的.中间容器:JPanel,JScrollPane,JSplitPane,JToolBar.所谓的中间容器也就是指那些可以充当载体但是不能独⽴显⽰的组件,就是⼀些基本组件可以依托在其中,但是也不能独⽴显⽰,必须依托在顶层容器中才⾏.特殊容器:在GUI上其特殊作⽤的中间层,如JInternalFrame,JLayeredPane,JRootPane.这⾥的特殊容器其实也是中间容器类的⼀种,只不过在图形上更加能够起到专业和美化的作⽤.基本组件:能起到⼈机交互的组件,如JButton,JLabel,JComboBox,JList,JMenu,JSlider,JTextField.注:要添加基本组件,⼀定要添加中间容器来承载.以下⽰例能很好的描述这个问题:public class Test {public static void main(String[] args) {JButton jButton = new JButton("test");}}这段代码运⾏后没有任何显⽰.再看这段代码public class Test {public static void main(String[] args) {JFrame jFrame = new JFrame("test");JButton jButton = new JButton("test");jButton.setSize(10,20);jFrame.add(jButton);jFrame.setSize(400,300);jFrame.setVisible(true);jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}}运⾏结果如图所⽰:尽管设置了jButton的⼤⼩为10,20.但是依然充满了整个Frame.为了实现jButton的⼤⼩为10,20,必须添加⼀个中间容器来承载才⾏.再看如下代码:public class Test {public static void main(String[] args) {JFrame jFrame = new JFrame("test");JButton jButton = new JButton("test");JPanel pane = new JPanel();jFrame.setContentPane(pane);jButton.setSize(10,20);jFrame.setSize(400, 300);pane.add(jButton);jFrame.setVisible(true);jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);}}运⾏结果:这样就达到了我们的设计⽬的.。
JFrame中各面板的层次结构

在Swing中,我们有三种可以使用的顶层容器类,它们分别是: JFrame:用来设计类似于Windows系统中的窗口形式的应用程序。
JDialog:和JFrame类似,只不过JDialog是用来设计对话框。
JApplet:用来设计可以在嵌入在网页中的Java小程序后来加入了JWindow组成四大顶层容器下面讲解四大顶层容器之一JFrame中各面板的层次结构:可以看出,Frame 的最底层是 RootPane,然后是 LayeredPane再上面就是 ContentPane最顶层是 GlassPane(透明的)现在我们再来看另一张图,从模型的角度来看 JFrame 的层次:可以看出,其实 ContentPane 是添加在 LayeredPane 上的一个控件。
而 LayeredPane 和 GlassPane 是直接添加在 RootPane 上的,RootPane 直接添加在 JFrame 上。
在Swing中的JFrame窗体与AWT中的Frame窗体有一些不同。
JFrame由他的窗体本身加上JRootPane根面板,JLayeredPane层面板,containPane内容面板,glassPane玻璃面板,JMenuBar菜单栏(可选,不包括在内)四部分组成。
其中根面板在JRootPane类中实现,层面板在JLayeredPane类中实现,他们都是JComponent的子类。
而containPane和glassPane没有专门对应的类。
JRootPane:根面板,在建立JFrame时就默认加进来了,覆盖除边框之外的整个表面,其余面板均在它之上,由它管理,默认可见不透明。
Swing中的三种顶层容器(JFrame、JDialog、JApplet)都依赖于根面板.你通常不需要了解关于使用Swing组件根面板方面的知识.JLayeredPane:建立在JRootPane(根面板)上,其上有菜单面板JMenuBar和内容面板containPane。
Swing界面

控件容器面板控件容器面板(Pane),一个用于在图形界面上放置控件的可视区域。
所有Swing的可视化组件必须位于一个容器面板中。
容器面板之间可以层层包含,位于最顶层的容器面板称为顶层容器。
顶层容器包括:JFrame、JDialog、JappletJFrame:代表窗体JDialog:代表对话框JApplet:是Swing对Java Applet的扩展(不讲)JFrame窗口中的容器面板RootPaneLayeredPaneMenuBarContentPaneGlassPaneSwing组件在Java中提供了大量的Swing类,每种图形界面组件均有对应的Swing类,正确的使用这些类就可以完成Swing图形化界面编程。
通过创建这些类的对象(实例)就创建了这些图形界面组件。
将这些对象组合到一起就可以形成复杂的图形界面。
通过操纵这些对象的属性,可以控制对应图形界面组件的外观,如尺寸、颜色、大小、位置等。
JFrame代表一个窗体类全名:javax.swing.JFrame对象实例化之后没有大小、不可见,需要调用setSize设置大小、调用setVisible方法设置可见性。
JLabel代表一个标签类全名:javax.swing.JlabelJLabel对象可以显示文本、图像或同时显示二者。
创建Jlabel实例之后需要添加到顶级容器(如Jframe窗口)中JDialog对话框是一种可移动的窗口,比框架简单,没有那么多控制元素。
对话框通常依赖于一个窗口,这个窗口称为对话框的父窗口,对话框称为父窗口的“子窗口”对话框分模态和非模态,模态窗口打开时,不允许访问应用程序其他的窗口。
非模态窗口则不会导致此限制JOptionPaneJOptionPane有助于方便地弹出要求用户提供值或向其发出通知的标准对话框。
有关使用JOptionPane的信息,虽然由于方法数多使JOptionPane类可能显得复杂,但几乎所有此类的使用都是对下列静态showXxxDialog方法之一的单行调用:JButton命令式按钮JTextField文本编辑JpasswordField文本编辑框JCheckBox复选框JRadioButton单选框JComboBox组合框。
swing组件总结认识

JFrame是主窗口,它和JDialog,JApplet的地位并列。
但是,一个JFrame可以添加JDialog和JApplet进去它的内容面板,而反过来就不行。
2、JLabelJLabel是一标签,在它的文本里嵌入html标签,可以简单实现一个超链接组件3、JTextField一个文本框4、JTextArea文本区域,与文本框不同的是它是多行的5、JPasswordField6、JPanel一个面板.一般用作控制组件的布局.7、JCheckBox复选框8、JRadioButton单选按钮.单选按钮要用到ButtonGroup.添加到同一个ButtonGroup的单选按钮表示在它们之间只可选其一.不同ButtonGroup里的单选按钮相互之间的选择不受影响.9、JScrollPaneJScrollPane由四个角,两个头部,和一个视口组成.四个角和两个头部都是由Component组成.四个角并不是总是显示出来的.左上角只有当两个头部同时存在才显示,右下角只有两个滚动条同时出现才会出现.其他两个角可同理知道什么时候会出现.视口是显示内容的部分,由JViewport对象表示.而真正显示的内容,由JV iewport的view表示10、JListJList是一个列表.这里将首次引入Model这个概念,中文翻译是模型,不好理解,其实就是数据的意思.JList用ListModel保存它的数据.简单应用可以用实现了ListModel的AbstraceListModel的子类DefaultListModel来保存它的数据(尽管它的名字有Default,但是只有你使用了它创建JList,它才存在.即如果你没有用DefaultListModel创建JList,则你用getModel()返回的ListModel不能强制转换为DefaultListModel).11、JComboBox组合框和JList很相似,它们都是用ListModel来保存数据.默认它是使用实现了ListModel的子接口ComboBoxModel的DefaultComboBoxModel来保存数据的.与JList的情况不同,一个JComboBox总是有一个Model来保存数据的,而JList则不然.12、JFileChooserJFileChooser代表一个打开/保存文件对话框13、JColorChooser一个颜色选择器.它的构造方法有:JColorChooser(),JColorChooser(Color initialColor),JColorChooser(ColorSelectionModel model) 创建了对象以后,可以调用将它添加到JFrame,JPanel等其他容器里面.14、JSliderJSlider是一个滑动条.其实它还是比较容易使用的15、JLayeredPaneJFrame,JApplet,JDialog,JInternalFrame其实是由好几部分组成的16、JInternalFrameJFrame不能添加JFrame到自已的内容面板.那么,如何实现多文档程序呢?用JInternalFrame17、GlassPaneGlassPane可以用来截获输入事件(键盘和鼠标).没有JGlassPane可以调用JFrame的void setGlassPane(Component glassPane)来设置GlassPane默认GlassPane是不可见的,要调用getGlassPane().setV isible(true)使其可见18、JProgressBar进度条.当一个任务要较长时间来完成时,我们可以用一个进度条来表示任务的完成进度.在讲进度条的用法之前,我们先来看javax.swing.SwingWorker类的用法.我们将用这个类来模拟我们的"较长的任务19、JTabbedPane选项卡.构造方法:JTabbedPane() ,JTabbedPane(int tabPlacement) ,JTabbedPane(int tabPlacement, inttabLayoutPolicy)20、JFormattedTextField在讲JFormattedTextField之前,先讲用于指定格式的类:Locale,NumberFormat,DecimalFormat,DecimalFormatSymbols,DateFormat,SimpleDateFormat,DateFormatSymbols根据地区/语言(Locale)的不同,各种数字,日期的格式会有所不同.例如902333这个数字在德国会写作902.333,而在美国写作902,333创建Locale可以使用它的构造方法,也可以使用它的一些常量.例如下面两个语句是等价的: Locale locale1 = new Locale("zh","CN");Locale locale2 = Locale.CHINA;上面用到的"zh"(小写)和"CN"(大写)分别遵循着一定的规定,在下面的链接可以找到这些搭配:/pub/ietf/http/related/iso639.txthttp://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html你可以用任意的"xx"和"XX"搭配来创建Locale,但是,并不是所有都是有意义的,即Locale不一定可被上面的XXXFormat使用.使用下面的程序可以得到DateFormat可以使用的组合:21、JSpinner微调组件.微调组件由Editor,微调按钮,和它的Model组成.在构造JSpinner时,可以指定它的Model.swing提供了三个Model:SpinnerListModel,SpinnerNumberModel,SpinnerDateModel结构是SpinnerModel|_AbstractSpinnerModel|_SpinnerListModel,SpinnerNumberModel,SpinnerDateModel对应有三个Editor:JSpinner.ListEditor,JSpinner.NumberEditor,JSpinner.DateEditor,三个都是JSpinner.DefaultEditor的子类JSpinner.DefaultEditor|_JSpinner.ListEditor,JSpinner.NumberEditor,JSpinner.DateEditor可以看到,有很大的空间可以自定义一个JSpinner当你需要自定义它的Editor时,你可以用void setEditor(JComponent editor),也可以用JSpinner.DefaultEditor.getTextField()来取得JFormattedTextField,然后对这个JFormattedTextField来调用方法.可以通过addChangeListener对JSpinner值的改变作出反应.22、JTree这个组件太复杂了,只能很简单很简单地介绍一下.一树由根节点和子节点组成.它们都是由DefaultMutableTreeNode表示根节点是必须的,子节点可有可无.传给DefaultMutableTreeNode的构造方法的是一个Object.在构造JTree的时候,会调用这个Object的toString()取得显示在JTree上的节点的文本.调用void add(MutableTreeNode newChild)来增加一个子节点.在构造JTree时,将用DefaultMutableTreeNode表示的根传入构造方法JTree(TreeNode root) ,这样就可以构造一棵树.23、.Jtable 表格组件应网友要求,勉强加上JTable的用法讲述.写得不好,望不见怪没有比这个组件更复杂的了它由标题头和单元格组成.而单元格又分为编辑状态和非编辑状态.自定义JTable主要是对单元格作文章.默认的单元格是一个label,和JTree一样,如果你在创建JTable的时候传递的是其他对象而不是String对象,则该对象的toString方法将被调用.它返回的字符串就会显示在单元格的label里.同以往一样,可以通过”渲染器”将其他组件显示在单元格里;而编辑状态下的单元格默认是一个文本框.可以通过指定CellEditor来指定其他的组件作为编辑状态下单元格的组件(简称编辑器).你可以为某一种类型的数据指定一种编辑器,也可以为一整列的数据指定特定的编辑器.编辑器可以用作验证用户输入的合法性.对于渲染器和编辑器的概念,是和JTree里的相似的这个组件一般放在一个滚动窗格里.你可以把一个表格作为滚动窗格的viewport,然后再把滚动窗格添加到主框架的内容窗格(content pane)里.如果你不这样做,那么你必须分别把表格头和表格添加到框架窗口的content pane里.这个组件也是用所谓的模型来保存它的数据的.TableModel就是用来保存数据的.而它和JList 一样,用ListSelectionModel来保存选择了的项.另外它还有TableColumnModel来保存关于列的数据.下面几幅图总结了各部Model和Renderer的父子关系.下面是例子程序/*本程序演示了如何自定义自己的渲染器,自已的编辑器,和自己的数据模型其中渲染器使得数据是Color类型时显示一个带颜色的JLabel当数据是Color类型时编辑器是一个按钮,用以选择颜色*/24、Jtable 表格组件没有比这个组件更复杂的了它由标题头和单元格组成.而单元格又分为编辑状态和非编辑状态.自定义JTable主要是对单元格作文章.默认的单元格是一个label,和JTree一样,如果你在创建JTable的时候传递的是其他对象而不是String对象,则该对象的toString方法将被调用.它返回的字符串就会显示在单元格的label里.同以往一样,可以通过”渲染器”将其他组件显示在单元格里;而编辑状态下的单元格默认是一个文本框.可以通过指定CellEditor来指定其他的组件作为编辑状态下单元格的组件(简称编辑器).你可以为某一种类型的数据指定一种编辑器,也可以为一整列的数据指定特定的编辑器.编辑器可以用作验证用户输入的合法性.对于渲染器和编辑器的概念,是和JTree里的相似的这个组件一般放在一个滚动窗格里.你可以把一个表格作为滚动窗格的viewport,然后再把滚动窗格添加到主框架的内容窗格(content pane)里.如果你不这样做,那么你必须分别把表格头和表格添加到框架窗口的content pane里.这个组件也是用所谓的模型来保存它的数据的.TableModel就是用来保存数据的.而它和JList 一样,用ListSelectionModel来保存选择了的项.另外它还有TableColumnModel来保存关于列的数据.下面几幅图总结了各部Model和Renderer的父子关系.。
深入浅出java swing程序设计-概述说明以及解释

深入浅出java swing程序设计-概述说明以及解释1.引言1.1 概述Java Swing是一种用于构建图形用户界面(Graphical User Interface,简称GUI)的Java库。
它为开发人员提供了丰富的组件和布局管理器,可以轻松创建具有各种功能和样式的交互式应用程序。
Java Swing的出现填补了Java原生GUI工具包的不足,为开发人员提供了更多的自定义和灵活性。
与AWT(Abstract Window Toolkit)相比,Swing提供了更多的组件和界面控件,同时具备更好的跨平台性。
Java Swing不仅仅是一个图形用户界面库,它还提供了一整套用于处理用户输入、图形绘制、多媒体展示等功能的类和工具。
开发人员可以利用这些工具快速构建具有丰富交互性的应用程序。
本文将深入浅出地介绍Java Swing程序设计的基本概念和技巧。
我们将从Swing的组件和布局开始,逐步展示如何创建简单且功能强大的用户界面。
通过学习本文,读者将能够掌握Java Swing的核心知识,并能够利用这些知识开发出符合自己需求的应用程序。
本文的目的是帮助读者快速上手Java Swing,了解其基本概念和使用方法。
同时,我们也将展望Java Swing的未来发展,探讨其在现代应用程序开发中的重要性和应用前景。
在接下来的正文部分,我们将详细介绍Java Swing的基本概念,包括组件、事件、布局等内容。
同时,我们还将给出一些实际的例子,以便读者更好地理解和应用所学知识。
总之,本文将从大纲所列的各个方面对Java Swing进行深入浅出的探讨,旨在帮助读者全面了解和掌握Java Swing程序设计的基本技巧和应用方法。
希望读者能够通过本文的学习,具备自主开发Java Swing应用程序的能力,并能在实际项目中灵活应用所学知识。
1.2 文章结构本文主要以深入浅出的方式介绍Java Swing程序设计。
文章分为引言、正文和结论三个部分,每个部分有相应的小节。
swing 组件和容器——java swing 组件技术(中)

swing 组价和容器——java swing 组件和技术(中)一、swing组件和容器概览1.顶层容器(JFrame,JDialog,JApplet)JFrame—框架,主要用来设计应用程序的图像界面JDialog—对话框,通常用来设计具有依赖关系的窗口JApplet—小应用程序,主要用来设计嵌入网页中运行的java程序2.一般容器普通容器(JPanel、JScrollPane、JToolbar、JSplitPane、JTabbedPane) JPanel—面板,通常只有背景颜色的普通容器JScrollPane—滚动窗格,具有滚动条JToolbar—工具条,通常将多个组件排成一排或者一列JSplitPane—分裂窗格,用来装两个组件的容器JTabbedPane—选项卡窗格,允许多个组件共享相同的界面空间专用容器(JLayeredPane、JRootPane 、JInternalFrame)JLayeredPane—分层窗格,给窗格增加了深度的概念JRootPane—根窗格,一般是自动创建的容器JInternalFrame—内部窗格,可以在一个窗口内显示若干个类似于框架的窗口3.基本控件(JButton、JCombobox、JList、JMenu、JSlider、JTextField)4.不可编辑信息组件(JLabel、JProgressBar、JToolTip等)5.可编辑组件(JColorChooser、JFileChooser、Jtabel、JTextArea、JTree等)二、常用的swing组件和容器1.JFrame✧顶层容器,默认不可见;默认布局方式为BorderLayout✧构造函数:●JFrame()●JFrame(String title)//title 为框架的标题内容✧JFrame常用方法●setDefaultCloseOperation(int operation)—设置关闭框架的行为参数operation一般是JFrame. EXIT_ON_CLOSE,表示关闭框架时,则退出程序●setSize(int width, int height)—设置框架的大小●setVisible(boolean b)—设置框架是否可见,默认为false●getContentPane()—获取顶层容器的内容面板●add(Component comp)—往内容面板添加组件●setLayout(LayoutManagermgr)—设置布局方式,默认为BorderLayoutexample:JDialog 和JOptionPane的demo2.JDialog 和JOptionPanea)JDialog✧在已有的窗口上创建对话框,可以使用此类创建自定义的对话框✧构造函数:⏹JDialog(Dialog owner, String title, boolean modal)⏹JDialog(Frame owner, String title, boolean modal)owner—指定对话框的父窗口title—对话框的标题modal—对话框的模式(true为“有模式对话框”,false为“无模式对话框”✧JDialog常用方法⏹setSize(int width, int height)—设置对话框的大小⏹getContentPane()—获取顶层容器的内容面板⏹add(Component comp)—往内容面板添加组件⏹setLayout(LayoutManagermgr)—设置布局方式,默认为BorderLayoutb)JOptionPane✧提供一些现成的、各种常用的标准对话框(有模式的对话框)✧JOptionPane类里静态方法众多,但几乎所有静态方法都遵循showXxxDialog()的形式,如下:这四种方法的参数都遵循一致的模式:①ParentComponent:指示对话框的父窗口对象,一般为当前窗口。
常用Swing组件

JTabbedPane类的构造方法有: 类的构造方法有: 类的构造方法有 JTabbedPane() 创 建 空 对 象 , 该 对 象 具 有 缺 省 的 标 签 位 置 JTabbedPane.TOP 和缺省的布局策略JTabbedPane.WRAP_TAB_LAYOUT。 。 和缺省的布局策略 JTabbedPane(int tabPlacement)创建空对象,该对象具有指定 创建空对象, 创建空对象 的标签位置:JTabbedPane.TOP、JTabbedPane.BOTTOM、 的标签位置: 、 、 JTabbedPane.LEFT 或 JTabbedPane.RIGHT 以 及 缺 省 的 布 局策略JTabbedPane.WRAP_TAB_LAYOUT。 局策略 。 JTabbedPane(int tabPlacement, int tabLayoutPolicy)创建空对 创建空对 象 , 该对象具有指定的标签位置和布局策略。 布局策略可 该对象具有指定的标签位置和布局策略 。 以是以下两种之一: 以是以下两种之一 : JTabbedPane.WRAP_TAB_LAYOUT 或 JTabbedPane.SCROLL_TAB_LAYOUT。加滚动条 。
javax.swing.JPane 类继承于 类继承于javax.swing.JComponent 类 , 其构 造 其 构造 方法有: 方法有: JPanel() 创建具有缺省 创建具有缺省FlowLayout布局的 布局的JPanel对象。 对象。 布局的 对象 JPanel(LayoutManager layout) 创 建 具 有 指 定 布 局 管 理 器 的 JPanel对象。 对象。 对象 作为画布的绘画区域使用时, 将JPanel作为画布的绘画区域使用时, 要使用下面的两个步骤 : 作为画布的绘画区域使用时 要使用下面的两个步骤: 首先,设置画布绘图区域的大小;其次,使 用 paintComponent()方法 ( 不是 方法( 方法) 方法 不是paint()方法) 来绘图 , 在该方法 方法 来绘图, 体中, 首先调用方法super.paintComponent( ) 来清除显示区 体中 , 首先调用方法 ( 域。
Swing组件-JPane,菜单栏,工具栏

JDialog窗体 窗体 高级组件中的工具栏
工具栏的特点:允许随意拖动(默认)。如果要不允许随意 工具栏的特点:允许随意拖动(默认)。如果要不允许随意 )。 拖动,可以通过调用setFloatable(boolean b)方法将入 拖动,可以通过调用 ( ) 口参数设为false实现,设为 实现, 则表示允许随意拖动。 口参数设为 实现 设为true则表示允许随意拖动。 则表示允许随意拖动
在窗体中添加工具栏, 在窗体中添加工具栏,该窗体一定要采用默认的边界布局方 并且不能在边界布局的四周添加任何组件。 式,并且不能在边界布局的四周添加任何组件。
JDialog窗体 窗体 高级组件中的工具栏
JDialog窗体 窗体 高级组件中的工具栏
敲了代码,运行不出效果。 敲了代码,运行不出效果。
列表框组件JList 列表框组件
列表框( 列表框(JList)与下拉列表框的区 ) 别不仅表现在外观上, 别不仅表现在外观上,当激活下拉列 表框时,会出现下拉列表框中的内容, 表框时,会出现下拉列表框中的内容, 但列表框只是在窗体上占据固定的大 如果需要列表框具有滚动效果, 小,如果需要列表框具有滚动效果, 可以将列表框放入滚动面板中, 可以将列表框放入滚动面板中,此时 可利用Shift键或 键或Ctrl键进行多选。 键进行多选。 可利用 键或 键进行多选
列表框组件JList 列表框组件
Swing中使用 中使用Jlist类对象表示列表框,下面列举几个常用的 类对象表示列表框, 中使用 类对象表示列表框 构造方法: 构造方法:
列表框组件JList 列表框组件
列表框组件JList 列表框组件
JDialog窗体 窗体 高级组件中的菜单栏
敲了代码,运行不出效果。 敲了代码,运行不出效果。
java swing 面板

++ jar的基本操作Jar文件的基本操作1.创建相关\>jar cf jar-file input-file(s)/*说明,windows下和UNIX下对目录结构的分隔符习惯不同,前者为\,后者为/ ,本文仅仅为了说明问题,并不严格加以说明。
——注意,无论任何平台,在manifest文件中均采用/*//*该形式的命令在当前目录下创建一个jar-filec开关指明“创建”一个jar文件f开关指明输出到文件,而不是stdout(标准输出)jar-file如果不指明后缀,则默认为*.jar空格用于分隔多个输入文件,可以使用通配符“*”有必要时指明目录开关出现的顺序不重要,但是如果有m开关则另当别论。
该命令默认创建一个manifest文件*//*对于java版本1,jar文件仅支持ASCII作文件名,java版本2则支持UTF-8编码的文件名。
*//*关于创建,可用的其他开关:v 当jar文件创建时,在stderr(java版本1)或stdout(java版本2)产生冗余(verbose)输出。
报告添加到jar的文件名录。
0 (zero)指明不要压缩。
M 指明不要产生默认的manifest文件。
m 添加手工已编制好的manifest文件:\>jar cmf existing-manifest jar-file input-file(s)-C 在操作过程中转变目录(仅对java版本2)。
*//*一个例子。
假设,如下目录结构(windows下):TicTacToe\TicTacToe.class (文件)TicTacToe\audio (子目录,该层下全是au文件)TicTacToe\images (子目录,该层下全是gif文件)如果要将该东东压入jar文件TicTacToe.jar,应在TicTacToe目录中(!)执行下面命令:TicTacToe>jar cvf TicTacToe.jar TicTacToe.class audio imagesjar程序会自动将audio和images目录及其子目录一咕脑(recursively)全压入TicTacToe.jar文件,该文件将出现于TicTacToe\TicTacToe.jar因为使用了verbose output开关,可以看到类似如下的输出:adding: TicTacToe.class (in=3825) (out=2222) (deflated 41%)adding: audio/ (in=0) (out=0) (stored 0%)adding: audio/beep.au (in=4032) (out=3572) (deflated 11%)adding: audio/ding.au (in=2566) (out=2055) (deflated 19%)adding: audio/return.au (in=6558) (out=4401) (deflated 32%)adding: audio/yahoo1.au (in=7834) (out=6985) (deflated 10%)adding: audio/yahoo2.au (in=7463) (out=4607) (deflated 38%)adding: images/ (in=0) (out=0) (stored 0%)adding: images/cross.gif (in=157) (out=160) (deflated -1%)adding: images/not.gif (in=158) (out=161) (deflated -1%)如果:TicTacToe>jar cvf0 TicTacToe.jar TicTacToe.class audio images则表示只备份不压缩。
Java Swing开发模式

第1章简介Java的基础类(JFC)是开发图形用户界面的API集。
Java的基础类包括以下API:·抽象窗口工具包(版本1.1及以后的版本)。
·2D API。
·Swing组件。
·可访问性API。
抽象窗口工具包(Abstract Win dow Toolkit,AWT)是Java开发用户界面最初的工具包。
AWT是建立JFC的主要基础,《Java 2图形设计,卷Ⅰ:AWT》对AWT有详细的介绍。
2D API提供了AWT所缺乏的附加图形功能。
例如,AWT对图形操作只提供了一种规格的笔——即一个像素大小的正方形。
而2D API除提供了不同大小的笔外,还提供了丰富的二维着色能力。
《Graphic Java2,V olume IV:2D API》一书中对2D API有详细的介绍。
Swing是建立在AWT之上的(参见1.2节“轻量组件与重量组件的比较”中对轻量组件与重量组件比较的讨论)、包括大多数轻量组件的组件集。
除提供了AWT所缺少的、大量的附加组件外,Swing还提供了替代AWT重量组件的轻量组件。
Swing还包括了一个使人印象深刻的、用于实现包含插入式界面样式等特性的图形用户界面的下层构件。
因此,在不同的平台上,Swing组件都能保持组件的界面样式特性,如双缓冲、调试图形和文本编辑包等。
可访问性(Accessibility)API是一个类集,其中的类使Swing组件能够与用于残疾用户的援助技术交互。
JFC还包括许多可访问性工具,这些工具与可访问性API联合使用。
1.1 Swing的历史要了解Swing,首先必须了解AWT,AWT是Swing的基础。
Java的发展速度超出了人们的想象,Java API中最可视的部分——API突然成为了人们关注的焦点。
遗憾的是,原来的AWT不能满足发展的需要。
原来的AWT不是为许多开发人员使用的、功能强大的用户界面(UI)工具包而设计的,其设计目的是支持开发小应用程序中的简单用户界面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主要参考文现:[美]Herbert Schildt 著 鄢爱兰 鹿江春译 《java 参考大全 J2SE 》 清华大学出版社 2006年1月孙卫琴 《Java 面向对象编程》 出版社及日期不详java API 开发人员文档本文作者:黄邦勇帅本文的说明:本文主要讲解了对大学初学Swing 时对根面板JRootPane ,内容面板containPane ,层面板JLayeredPane ,玻璃面板glassPnae 的困惑,本文对各种面板作了详尽的讨论,让读者能真正的明白根面板,内容面板,层面板到底是什么,他们在程序中的作用,以及他们之间的关系,透明性,可见性,作了讲解。
本文内容完全属于个人见解与参考文现的作者无关,其中难免有误解之处,望指出更正。
Swing 组件的各种面板(JRootPane 根面板,JLayeredPane 层面板等)第一部分:JFrame 中各面板间的关系,透明性与可见性问题注:在某些地方把面板也叫做窗格,比如根面板,也叫根窗格,层面板也叫分层窗格等。
注意窗格与窗体是不一样的。
在Swing 中的JFrame 窗体与AWT 中的Frame 窗体有一些不同。
JFrame 由他的窗体本身加上其上的JRootPane 根面板,JLayeredPane 层面板,containPane 内容面板,glassPane 玻璃面板,JMenuBar 菜单栏(可选,不包括在内)四部分组成。
其中根面板在JRootPane 类中实现,层面板在JLayeredPane 类中实现,他们都是JComponent 的子类。
而containPane 和glassPane 没有专门对应的类。
1、各种面板(或称窗格)的关系及作用:JRootPane 根面板:该面板是在JFrame 窗体创建时就默认添加进来的,是所有其他面板的载体或父级,他覆盖窗体的除标题栏和边条之外的整个表面。
根面板默认是不可见的。
根面板负责管理其他面板(层面板,玻璃面板),如使其他面板覆盖整个JFrame 窗体等。
JLayeredPane 层面板:该面板是其他所有面板的父级,在JRootPane 面板的上面,他再次覆盖窗体的整个表面,内容面板和JMenuBar 菜单栏被添加到层面板上。
当添加了菜单栏时,菜单栏被添加到JLayeredPane 面板的顶部,剩下的部分被内容面板填充。
层面板是分很多层的,每一层使用一个相应的数字来表示,而内容面板就位于层面板中的某一层,在后面的内容中我们可以看到层面板可以让你设计出相互重叠的内部窗体,层面板将负责管理各种内部窗体的叠放问题,对于层面板的每一层都相当于是一个容器,因此可以直接向层面板中添加组件。
层面板的内容后面会作具体介绍。
containPane 内容面板:由层面板的介绍可知,内容面板是层面板中的某一层。
默认的内容面板是不透明的,而且是一个JPane 对象。
该面板在窗体中起着工作区的作用,当我们向窗体添加组件时就应该添加到这一层上,而不能像AWT 那样直接添加到窗体上,若你那样做了,实际上该组件也是被添加到内容面板上的,若窗体未设置内容面板,则组件无法显示。
比如要添加按钮jb 则正确的方式为,Container p=jframe.getContentPane(); p.add(jr); 或jframe.getContentPane().add(jr); 其中getContentPane()是JFrame 类中的方法,该方法将反回内容面板的引用,这是访问默认的内容面板的方法,因为默认的内容面板没有特定的名字,因此应使用该方法。
glassPane 玻璃面板:该面板总是存在的,而且他位于最上面,默认情况下玻璃面板是不可见的,玻璃面板用于接收鼠标事件和在其他组件上绘图。
2、各面板中使用的布局管理器:在内容面板上使用的布局管理器默认是BorderLayout 。
在根面板上使用的布局管理器是一个自定义的LayoutManager(布局管理器),他的作用是布局根面板之上的其他面板。
很明显如果你要向根面板中添加组件就应使用setLayout 方法为其设置合适的布局管理器或自已设定组件的大小和显示位置。
如果你改变了根面板自定义的LayoutManager那么你就应编写负责布局根面板之上的各种面板的程序,如果没有这样的程序,那么在根面板之上的各种面板就不能正常的布局,因此对于根面板的布局管理器一般不要随便更改。
玻璃面板的默认布局管理器是FlowLayout。
对于层面板而言,在将容器添加进层面板时,将在添加容器时指定把该容器添加进层面板的哪一层,因而某层的布局管理器由添加到该层的容器所决定,因此无需为层面板的某一层设置布局管理器,也就是说层面板没有布局管理器。
当把某一容器(比如Panel)设为某种面板(内容面板)时,则面板的布局与添加进来的容器的布局管理器相同,比如把Panel 作为内容面板,则内容面板的布局管理器就是FlowLayout。
注意:对于层面板的各层来说,只能把某种容器(比如Panel)设置为内容面板,不能把容器设置为层面板中的其他各层。
3、各面板的可见性和透明性问题可见性使用setVisible方法来显示(在AWT时已见过不少),透明性使用setOpaque方法来设置。
setOpaque方法只有在javax.swing包中的组件才有,对于java.awt包中的组件是没有该方法的,因此要使用该方法有时需要使用强制类型转换可见性与透明性的区别:区别在于,当面板是不可见时,则该面板中包含的组件也会不可见。
若该面板是透明但可见的,则只是面板会透明(比如面板的背景色无法看到),但面板上的组件仍会显示。
根面板:默认情况下,根面板是可见且不透明的。
内容面板:默认情况下,内容面板是可见的且不透明的,因此我们创建的JFrame窗体,实际上看到的是内容面板中的内容。
玻璃面板:默认的玻璃面板是透明的且不可见的,因此要显示默认的玻璃面板应设置setVisible和setOpaque两个方法,若你把某一容器(比如Panel)设为玻璃面板,那么这时的玻璃面板仍然是不可见的,但他不是透明的,这取决于容器(比如Panel)是否是透明的。
因此要把这种类型的玻璃面板显示出来只需设置setVisible方法就够了。
层面板:不管是你自已创建的层面板还是默认的层面板都是透明的且可见的,层面板中的内容面板是个特例,要使层面板可显示应设置setOpaque方法。
层面板和内容面板可见性与透明性的关系:内容面板默认在层面板的-30000层,若我们像层面板添加组件时应设置将该组件添加进层面板的哪一层,若不然就会出现一些问题,因此应使用add(Component com, Object constrainer)这个方法,在添加组件时使用add(com, new Integer(100));这样的形式,Integer对象是int装相后的结果,装相后把整数当作对象来看待,其实Integer对象就是一个整数。
内容面板和层面板及层面板之间的显示问题,因为只能把某种容器(比如Panel)设置为内容面板,不能把容器设置为层面板中的其他各层,我们也无法直接该问到层面板中的其他各层,因此层面板将只会有一种背景色(除内容面板外)且背景色使用JLayeredPane类型的对象来设置,不会存在层面板的每一层都有各自的背景色的情况,层面板透明与不透明也只能由JLayeredPane的对象来设置,不能设置层面板中各个层次的透明性。
因此在层面板的各层之间他们始终是彼此透明的,无法更改,而相对与其他面板层面板(比如根面板)可以透明也可以不透明(使用JLayeredPane对象来设定)。
而对于内容面板而言,由于内容面板是存在于层面板中的某一层,因此层面板中的其他层相对于内容面板也是透明的,无法更改。
但是在层面板的所有层中只有内容面板是不透明的,因此若我们既为内容面板设置了背景色也为层面板设置了背景色那么最后只会显示内容面板的背景色,除非让内容面板透明或不可见,这时才会显示出层面板的背景色。
当向层面板中添加的组件在内容面板之上(大于-30000)时,这些组件将与内容面板的组件同时显示(若不重叠的话,若重叠则显示层数数值更大的组件)。
若向层面板中添加的组件在内容面板之下(小于-3000层),那么内容面板将把层面板中的组件都遮挡住,因为内容面板是不透明的。
应注意的问题:1、containPane是JLayeredPane中的某一层。
是我们的工作区间,组件都应该添加到该面板上。
而不能像AWT那样直接向Frame窗体添加组件。
2、可以创建JRootPane的对象,但无法把该对象设置为某一个窗体的根面板,因此一般情况下JFrame窗体的根面板是唯一的。
比如JRootPane jr=new JRootPane; 但不能使用JFrame中的jframe.setRootPane(jr);方法把jr设置为该窗体的根面板,因为setRootPane方法是protected类型的,只能由继承自该类的子类的构造方法使用。
3、关于设置面板的问题:对于JFrame窗口的根面板和层面板只能把JRootPane和JLayeredPane类型的对象设为根面板和层面板,而不能把Component或Container类型的组件设为根面板或层面板。
而对于玻璃面板则可以把Component类型的对象设为玻璃面板,对于内容面板可以把Container类型的对象设为内容面板。
这取决于JFrame 类中的set***Pane(类型参数);方法中的”类型”是什么。
对根面板其类型为JRootPane,对内容面板类型为Container 4、关于内容面板:除了默认的层面板附带有内容面板之外,你自已创建的层面板将不会拥有内容面板,这时你必须手动为层面板设置一个内容面板(比如把JPanel设为内容面板),因为层面板是不可见且透明的,因此我们现在看到的将是根面板的内容,若你为根面板设置了背景色,则将显示该背景色。
比如JLayeredPane jp=new JLayeredPane();jframe.setLayeredPane(jp); 这时若使用jframe.getContentPane().add(jb); 语句,那么按钮jb将无法显示,因为该层面板中还没有内容面板存在,在添加组件之前应把某个容器设为内容面板,比如jframe.setContentPane(jpanel);这样程序就能正常运行了。
5、关于所有面板都设为不可见或透明时的问题:若除根面板外把其他所有面板都设为不可见或透明,则若根面板设为透明,则会显示JFrame的面板,标题栏和边框。
若根面板设为不可见,则我们只能看到一个框架,即只有标题栏,边框,看不见JFrame的面板。