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细分

总结

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
原创粉丝点击