组件介绍 随笔
组件介绍 随笔
Swing组件分类
组件从功能上分可分为:
-
顶层容器:JFrame,JApplet,JDialog,JWindow共4个
-
中间容器:JPanel,JScrollPane,JSplitPane,JToolBar
-
特殊容器:在GUI上起特殊作用的中间层,如JInternalFrame,JLayeredPane,JRootPane.
-
基本控件:实现人际交互的组件,如Jbutton, JComboBox, JList, JMenu, JSlider, JtextField。
-
不可编辑信息的显示:向用户显示不可编辑信息的组件,例如JLabel, JProgressBar, ToolTip。
-
可编辑信息的显示:向用户显示能被编辑的格式化信息的组件,如JColorChooser, JFileChoose, JFileChooser, Jtable, JtextArea
Frame与JFrame
AWT组件介绍:
在AMT组件中分为两大类,这两类的基类分别是Component和MenuComponent,其中,MenuComponent是所有与菜单相关组件的父类,Component则是除菜单外其他AMT组件的父类,它表示一个能以图形化方式显示出来,并可与用户交互的对象。
Component类通常被称为组件,根据Component的不同作用,可将其分为基本组件类和容器类。基本组件类是按钮,文本框之类的,容器类则是通过Component的子类Container实例化的对象。Container又分为Window和Pannel,Window又分为Frame和Dialog,Frame是窗体,Dialog是对话框。Panel是中间容器。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G4Js6PET-1631369869170)(C:\Users\duanyf\AppData\Roaming\Typora\typora-user-images\image-20210911203304554.png)]
JFrame与Frame区别:
JFrame是Frame的子类,JFrame在javax.swing包内,Frame在包java.awt中
JFrame 与 JPanel
1.关系与定位
JFrame的定位
1.java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。
2.Swing 的三个基本构造块:标签、按钮和文本字段;但是需要个地方安放它们,并希望用户知道如何处理它们。JFrame 类就是解决这个问题的——它是一个容器,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。 JFrame 实际上不仅仅让程序员把组件放入其中并呈现给用户。比起它表面上的简单性,它实际上是 Swing 包中最复杂的组件。为了最大程度地简化组件,在独立于操作系统的 Swing 组件与实际运行这些组件的操作系统之间,==JFrame 起着桥梁的作用。==JFrame 在本机操作系统中是以窗口的形式注册的,这么做之后,就可以得到许多熟悉的操作系统窗口的特性:最小化/最大化、改变大小、移动。
JPanel
JPanel 类是Java 中一种常用到的中间容器,也是使用最多的Swing 组件之一。JPanel 中不仅可以添加组件和其他面板,还可以将JPanel 作为组件加入到JFrame 中去。JPanel 类从JComponent 类继承。
JFrame与JPanel的关系
JFrame是一个顶层的框架类,好比一个窗户的框子。也是一个容器类。这个框子可以嵌入几个玻璃窗。
JPanel是一个容器类,相当于一大玻璃窗。
JLabel等是一些基础组件,它必须置于某个容器里,类似于窗花、剪纸,必须置于窗户的表面。
JFrame自带了一个玻璃窗。可以通过语句 获得该内容窗格。
Containerc=getContentPane();
也可以定制一个新的玻璃面板替换原来的自带的玻璃窗,代码如下:
JPanel jp=new JPanel();
this.setContentPane(jp);
2.JFrame背景色设置
窗口背景颜色是指直接调用JFrame或者Frame的setBackground(Color color)方法设置后显示出来的颜色。其实,在你直接调用这个方法后,你的确设置了背景颜色,而==你看到的却不是直接的JFrame或者Frame,而是JFrame.getContentPane().==而JFrame上的contentPane默认是Color.WHITE的,所以,无论你对JFrame或者Frame怎么设置背景颜色,你看到的都只是contentPane.
contentPane是白色且contentPane是内容层覆盖了Frame 对Frame使用setBackground(Color color)但是看不到Frame看到的是contentPane 所以无效
JFrame层次结构
Frame 的最底层是 RootPane,
然后是 LayeredPane
再上面就是 ContentPane
最顶层是 GlassPane ( 默认是透明的,
现在我们再来看另一张图,从模型的角度来看 JFrame 的层次:
可以看出,其实 ContentPane 是添加在 LayeredPane 上的一个控件。
而 LayeredPane 和 GlassPane 是直接添加在 RootPane 上的,
RootPane 直接添加在 JFrame 上。
其实你只要记住:
1、你现在不再需要去 getContentPane(),
2、ContentPane 默认是一个 JPanel ,
JComponent)
API中文解释:
该类是==除顶层容器外所有 Swing 组件的父类。==要使用继承自 JComponent
的组件,必须将该组件置于一个根为顶层 Swing 容器的包含层次结构(containment hierarchy)中。顶层 Swing 容器(如 JFrame
、JDialog
和 JApplet
)是专门为其他 Swing 组件提供绘制自身场所的组件。
添加Swing组件方法:
与AWT组件不同,Swing组件不能直接添加到顶层容器中,它必须添加到一个与Swing顶层容器相关联的内容面板(content pane)上。内容面板是顶层容器包含的一个普通容器,它是一个轻量级组件。基本规则如下:
(1)把Swing组件放入一个顶层Swing容器的内容面板上
(2)避免使用非Swing的重量级组件。
对JFrame添加组件有两种方式:
1) 用getContentPane( )方法获得JFrame的内容面板,再对其加入组件:
JFrame frame=new JFrame();
frame.getContentPane().add(childComponent);
现在是frame.add(jbutton)是因为省略了getContentPane,swing组件默认都是添加到内容层
2. 建立一个Jpanel或 JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:
```java
JFrame frame=new JFrame();
Jpanel contentPane=new Jpanel( );
……//把其它组件添加到Jpanel中;
frame.setContentPane(contentPane); J
//把contentPane对象设置成为frame的内容面板
```
轻量级组件和重量级组件
轻量级组件是用JAVA代码画出来的,这样具有平台移植性。
重量级组件是调用操作系统的函数画出来的组件,比如主窗体。
一般来说尽量用轻量级的组件,这样对程序的移植性很好,一般javax.swing包里的组件大部分是轻量级的,java.awt里面的是重量级的。 Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级( light-weight)组件,没有本地代码,不依赖操作系统的支持, 这是它与AWT组件的最大区别。由于AWT组件通过与具体平台相关的对等类(Peer)实现,因此Swing比AWT组件具有更强的实用性。 Swing在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其它特性。
*文章地址 http://www.360doc.com/content/12/0209/15/4228225_185300761.shtml*