JFrame, JPanel, JComponent
来源:互联网 发布:unity3d 过山车轨道 编辑:程序博客网 时间:2024/04/30 13:45
在进行GUI编写时,经常会遇到这几个类。它们之间的关系是怎么样的呢?这需要从包含层次(containment hierarchy)说起。以下内容参考java tutorials。
Swing库提供了3个顶层容器类(Top-Level container class): JFrame, JDialog, JApplet。在创建GUI时应该遵循以下原则:
- 要显示在屏幕上,每个GUI部件必须在一个树状的包含层次里,这个树的根必须是三个顶层容器类之一。
- 一个部件只能被包含一次
- 每个顶层容器内含有一个内容层(content pane),部件就在这个里面被显示。
- 顶层容器还包含一个菜单栏,菜单栏在内容层之外,与其并列。
这是一个示意图:
其实,对于JFrame进一步细分,可以得到如下结构:
可以看到包含有4个层次,分别为Root Pane, Layered Pane, Content Pane及可选的Menu Bar和Glass Pane. 它们在对窗体进行一些特殊处理的时候是有用的。
总结
JFrame作为顶层容器,包含了content pane和menu bar。 JPanel可以被设置为content pane用于存放JComponent。
如何添加component到content pane
有几种方法:
使用JFrame的getContentPane()方法获取content pane,再调用add()方法。
frame.getContentPane().add(yellowLabel, BorderLayout.CENTER);
需要注意:getContentPane()返回值为Container, 那么就不能利用JComponent的一些特性了。如要需要使用,要强制类型转换。自定义JPanel后设置为content pane.
//Create a panel and add components to it.JPanel contentPane = new JPanel(new BorderLayout());contentPane.setBorder(someBorder);contentPane.add(someComponent, BorderLayout.CENTER);contentPane.add(anotherComponent, BorderLayout.PAGE_END);topLevelContainer.setContentPane(contentPane);
- 直接使用Frame的add方法, 方法会自动添加到content pane中。
Frame.add(child)
需要注意:能采用这种方式操作content pane的函数只有add, remove和setLayout
如何添加menubar
直接使用以下函数。 frame.setJMenuBar(greenMenuBar);
0 0
- JFrame, JPanel, JComponent
- JFrame,JPanel,JLabel详解
- JFrame,JPanel,JLabel学习
- JFrame与JPanel的区别
- JPanel与JFrame的区别
- Java Frame Panel JFrame JPanel
- JFrame 和 JPanel 基础用法
- 问:JPanel与JComponent 、repaint() paint()与update()
- JComponent
- 设置JPanel或jframe的背景图片
- 在JFrame中设置JPanel的值
- 如何更改Jframe里Jpanel的大小
- JPanel与JFrame的区别与联系
- java swing difference between Jframe and JPanel
- java之JFrame、JPanel混合布局
- Jpanel或Jframe添加键盘监听无效
- JFrame、JPanel 、Layout开发的简单例子
- 如何"缝制"一个JPanel到JFrame上面
- java String,StringBuffer和StringBuilder
- CRB and His Birthday(完全背包变形)
- 委托 02
- CSS+JS 悬浮固定菜单效果
- 程序员保值的五个关键点
- JFrame, JPanel, JComponent
- Majority Element II
- java的异常处理
- 打造无限自动循环viewpager
- shell-init: error retrieving current directory: getcwd: cannot access parent directories
- Java 内存划分
- Seaside 3665 (最短路)
- #define \const\ typedef
- 接口和抽象方法的学习(7.18)