加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 什么是JPanel,JFrame,JLayeredPane和JRootpane

发布时间:2020-12-15 05:02:38 所属栏目:Java 来源:网络整理
导读:我是 java新手,在阅读时我遇到了各种框架和面板,JFrame,JLayeredPane,JRootPane和JPannel之间的混淆是什么,它们之间的差异是可以在单个类中同时使用JFrame和JPanel. 解决方法 看看这里的图片 ?从the German Java Tutorial page. 一些细节 JFrame是窗口,显示
我是 java新手,在阅读时我遇到了各种框架和面板,JFrame,JLayeredPane,JRootPane和JPannel之间的混淆是什么,它们之间的差异是可以在单个类中同时使用JFrame和JPanel.

解决方法

看看这里的图片

?从the German Java Tutorial page.

一些细节

> JFrame是窗口,显示为操作系统的顶级窗口.
> JFrame由多个功能元素组成.例如,其中一个可以减轻正确实现工具提示的负担:LayeredPane.除此之外,工具提示始终位于其他所有内容之上.
> ContentPane是放置主要内容的最明智的地方.
> JPanel是一个通用容器.您用来将按钮和表单放入的头号课程.

The official Swing tutorial很好地总结了设计.

让我们做一个最小的例子:

import javax.swing.JFrame;

public class SomeFrame {

    public static void main(String [] as) {
        // let's make it as simple as possible
        JFrame jFrame = new JFrame("Hi!");
        jFrame.setVisible(true);
    }
}

上面的代码会生成一个Frame,但不是真的可用:

让它变大一点,只是为了揭示标题:

JFrame jFrame = new JFrame("Hi!");
    jFrame.setSize(200,50);
    jFrame.setVisible(true);

结果:

现在,让我们看看是否可以在框架中添加任何组件.让我们添加一个标签 – 在Swing中它是由JLabel类实现的:

JFrame jFrame = new JFrame("Hi!");
    jFrame.setSize(200,100);
    JLabel label = new JLabel("Hello Swing!");
    jFrame.add(label);
    jFrame.setVisible(true);

好的,我们做了什么?将JLabel添加到JFrame中.如果您将查看Swing代码,JFrame.add()方法在内部将组件添加到ContentPane中.所以上面的代码相当于:

JFrame jFrame = new JFrame("Hi!");
    jFrame.setSize(200,100);
    JLabel label = new JLabel("Hello Swing!");
    jFrame.getContentPane().add(label);         // <----
    jFrame.setVisible(true);

您可以自己检查ContentPane是否由JPanel内部实现.它在Swing代码中:

// this invocation...
JFrame jFrame = new JFrame("Hi!");

// effectively invokes following methods:

public JFrame(String title) throws HeadlessException {
    // ...
    frameInit();
}

protected void frameInit() {
    // ...
    setRootPane(createRootPane());
    // ...
}

protected JRootPane createRootPane() {
    JRootPane rp = new JRootPane();
    // ...
}

public JRootPane() {
    setGlassPane(createGlassPane());
    setLayeredPane(createLayeredPane());
    setContentPane(createContentPane());
    // ...
}

protected Container createContentPane() {
    JComponent c = new JPanel();             // <----
    // ...
    return c;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读