java jframe添加面板_JFrame添加组件的两种方式

对JFrame添加组件有两种方式:1) 用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childCompontent)

常分开来写

Container container=getContentPanel();(隐式的this.getContentPanel()) ;得到jframe的内容面板

以后只要把容器加到container就可以了。

2) 建立一个JPanel或JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:JPanel contentPane = new JPanel();......//把其他组件添加到JPanel中frame.setContentPane(contentPane);//把contentPane对象设置成为frame的内容面板

一般使用JFrame添加组件时,比如frame是JFrame的一个对象,我一般都是直接使用add()方法将组件加入,但是我看了很多例子,他们都是frame.getContentPane().add(),先得到内容面板,然后再添加组件,这两种方法的区别是什么,为什么后面那个好像用的多些呢?

网友回答:

有区别的

当你创建一个JFrame的时候JFrame jf = new JFrame();

在构造方法JFrame()内部会给jf默认添加一个rootPane

所以执行完JFrame jf = new JFrame();这句话之后jf上面已经添加了一个默认的rootpanel了

然后你再调用jf.add(panel) 这个时候,panel和rootPane是平级的

理由:1,你可以读源代码 ,查看构造方法怎么写的

2,或者你可以测试一下,分别执行

jf.setBackground(Color.blue);

jf.getContentPane().setBackground(Color.black);

这两句代码,看看效果(实际上上面一句并不能改变界面的背景色,下面一句才可以,因为rootPane把jf给挡住了,上面一句是改变了jf的背景色,但是你眼睛看到的并不是jf,其实是rootPane.)

另外

jf.getContentPane()==jf.getRootPane().getContentPane()

上面的比较返回的true

所以你调用jf.getContentPane().add(panel) 其实是把panel添加到rootPane上面了 这个时候panel和rootPane就不是平级的了

JFrame java api

An extended version of java.awt.Frame that adds support for the JFC/Swing component architecture. You can find task-oriented documentation about using JFrame in The Java Tutorial, in the section How to Make Frames.

The JFrame class is slightly incompatible with Frame. Like all other JFC/Swing top-level containers, a JFrame contains a JRootPane as its only child.The content pane provided by the root pane should, as a rule, contain all the non-menu components displayed by theJFrame. This is different from the AWT Frame case. As a conveniance add and its variants, remove and setLayout have been overridden to forward to the contentPane as necessary. This means you can write:

frame.add(child);

And the child will be added to the contentPane. The content pane will always be non-null. Attempting to set it to null will cause the JFrame to throw an exception. The default content pane will have a BorderLayout manager set on it. Refer toRootPaneContainerfor details on adding, removing and setting theLayoutManagerof aJFrame.

JFrame 类与 Frame 轻微不兼容。与其他所有 JFC/Swing 顶层容器一样,JFrame 包含一个 JRootPane 作为其唯一的子容器。根据规定,根窗格所提供的内容窗格应该包含 JFrame 所显示的所有非菜单组件。这不同于 AWT Frame。为了方便地使用 add 及其变体,已经重写了 remove 和 setLayout,以在必要时将其转发到 contentPane。这意味着可以编写:

frame.add(child);

子级将被添加到 contentPane。内容窗格始终是非 null 的。试图将其设置为 null 会导致 JFrame 抛出异常。默认的内容窗格上会设置有 BorderLayout 管理器。有关添加、移除和设置JFrame的LayoutManager的详细信息,请参阅RootPaneContainer。产生JFrame的两种方法(不继承和继承)

importjavax.swing.JFrame;public classGameFrame {publicGameFrame()

{

JFrame frame=newJFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setTitle("3d tetris");

frame.setSize(500,300);

frame.setLocation(400,400);

frame.setVisible(true);

}public static voidmain(String[] args)

{

GameFrame gameFrame=newGameFrame();

}

}

public class GameFrame extendsJFrame{publicGameFrame()

{super("3d tetris"); //设置标题,不要也可以

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setTitle("3d tetris");

setSize(500,300);

setLocation(400,400);

setVisible(true);

}public static voidmain(String[] args)

{

GameFrame gameFrame=newGameFrame();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 德生读卡器对接程序_德生TSW-F4 社保卡读卡器.rar

【实例简介】德生TSW-F4 社保卡读卡器测试程序以及动态库,出厂自带程序【实例截图】【核心代码】b79d6d98-2fcb-4e20-ab26-8f7aa14b320c└── 德生TSW-F4 社保卡读卡器├── TSW-F4 U系列读写器随机软件_20120907│ ├── Dll│ │ ├── F4.h│ │ ├…

ios 数组越界奔溃库_iOS中防止数组越界之后发生崩溃

在iOS开发中有时会遇到数组越界的问题,从而导致程序崩溃。为了防止程序崩溃,我们就要对数组越界进行处理。通过上网查资料,发现可以通过为数组写一个分类来解决此问题。基本思路:为NSArray写一个防止数组越界的分类。分类中利用ru…

java map与set的区别_Java中的Set,List,Map的区别是什么?

对JAVA的集合的理解是想对于数组数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)JAVA集合可以存储和操作数目不固定的一组数据。所有的JAVA集合都位于 java。util包中!JAVA集合只能存放引用类型的的数据,不能存放…

java怎么使用泛型_java泛型 7 泛型的基本介绍和使用

现在开始深入学习Java的泛型了,以前一直只是在集合中简单的使用泛型,根本就不明白泛型的原理和作用。泛型在java中,是一个十分重要的特性,所以要好好的研究下。一、泛型的基本概念泛型的定义:泛型是JDK 1.5的一项新特性…

java铝轮_为速度而生 JAVA Fuoco铝合金气动公路

人类在追求速度的历史上一直在不断创新,从两个轮子的自行车,到四个轮字的汽车,再到螺旋桨的飞机,追求速度是人类与生俱来的天性。就如同公路车的用途非常多,综合型公路车、耐力型公路车、爬坡型公路车,但唯…

erlang mysql性能瓶颈,Erlang Mysql:如何防止SQL注入

Im very new to erlang and I need to code something which inserts rows in a MySQL Database.How can I prevent SQL Injections with Erlang? Is there also something like prepared statements in other Languages or how should I do it?Thanks for your replies.解决…

下列哪个不是java的数据类型_下面哪个不是Java基本数据类型?()

采集血标本时,错误的操作是A.血清标本应注入干燥试管B.生化检验标本在空腹时采集试比较脂肪酸β-氧化与生物合成的差异。调节水平衡的激素主要是A.胰岛素 B.甲状旁腺激素 C.血管升压素 D求比50克多5克的数是多少?列式是…

Java jpa 字段限制_Java-JPA:仅更新特定字段

我有同样的问题,正如Deinum先生所指出的,答案是否定的,您不能使用save。 主要问题是Spring Data不知道如何处理null。 是否设置了空值,还是因为需要将其删除而设置了空值?现在从您的问题来看,我认为您也有同…

java excel中删除两列_Java 插入、隐藏/显示、删除Excel行或列

概述操作Excel工作表时,对表格中的行或列数据可执行,包括插入、隐藏、显示、删除等在内的多种操作需求,本文将通过Java代码示例演示每种操作的具体实现方法。文中方法使用了Java Excel类库(Free Spire.XLS for Java 免费版),可通过…

java屏蔽编译告警_java-禁止JAXB生成的类上的编译器警告

这可能是该问题的副本(Avoiding Compiler warnings on code generated by xjc),但是由于我不太了解XJC / JAXB自定义绑定特质,所以我想我可能误解了所提到的问题.我的问题似乎很简单-如何将SuppressWarnings(“ all”)批注添加到生成的JAXB类中?我们的项目有0个警告…

Java中number数字类型的转换_Java下数字类型的转换 (转)

Java下数字类型的转换 (转)[more]作者:家居猫各种数字类型转换成字符串型:String s String.valueOf( value); // 其中 value 为任意一种数字类型。字符串型转换成各种数字类型:String s "169";byte b Byte.parseByte( s );short…

Java0steam_Java学习 - Stream 使用

Java Stream使用这段时间在学数据库和Java,发现Java的Stream实际上和数据库的查询操作非常类似。这里简单介绍Stream的用法,并和Sql Server中的操作联系起来。此文为初学Stream所写,以后对Stream有更深的理解后会重写当我们使用一个流的时候&…

mysql初始化很慢_mysql初始化报错

/var/log/mysql.log 日志报错如上图所示解决方法:SELinux惹的祸通俗的讲就是linux服务器的安全策略解决:临时关闭:setenforce 0永久关闭需要修改配置文件,重启机器:修改/etc/selinux/config 文件将SELINUXenforcing改为…

百度java的线程技术_自我提升(基础技术篇)——java线程简介

前言:虽然自己平时都在用多线程,也能完成基本的工作需求,但总觉得,还是对线程没有一个系统的概念,所以,查阅了一些资料,理解那些大神和官方的资料,写这么一篇关于线程的文章本来想废…

java调用扫描仪识别文字_Java使用扫描仪读取文件输入

示例Scanner scanner null;try {scanner new Scanner(new File("Names.txt"));while (scanner.hasNext()) {System.out.println(scanner.nextLine());}} catch (Exception e) {System.err.println("发生异常!");} finally {if (scanner ! nul…

d3 tip mysql_mysql

字符:char(10)->定长、10个字符宽度。如果右侧不够,则空格补齐,取出来的时候删除空格。varchar(10)->变长、最多10个字符如:存姓名的时候,没必要为了那几个长度去使用varchar,使用定长去存储会提高效…

java string rt_如何使jvm加载我的java.lang.String而不是rt.jar中的那个

我认真研究了Java类加载器。现在,我想编写一个与rt.jar中的类之一具有相同的包名称和类名称的类。例如,我自己编写一个java.lang.String类,以及如何打破父级委托模型以使jvm加载我的java.lang.String而不是rt.jar中的类。重新编辑Thx&#xf…

php在线语音,PHP在线语音合成

这篇文章主要介绍了PHP在线语音合成,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下在线语音合成 PHP SDKhttp://yuyin.baidu.com/docs/tts/194PHP SDK文档简介Hi,您好,欢迎使用百度语音合成服务。本文档…

php工厂模式和单例模式,php 设计模式之工厂模式、单例模式、注册树模式

php 设计模式之工厂模式、单例模式、注册树模式在软件工程中,创建型设计模式承担着对象创建的职责,尝试创建适合程序上下文的对象,对象创建设计模式的产生是由于软件工程设计的问题,具体说是向设计中增加复杂度,创建型…

php 正则匹配unicode,PHP中正则表达式对UNICODE字符码的匹配方法

网友ainiaa的问题是PHP代码如下代码如下:$words "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSRUVWXYZ!#$%^&*()_-[]\\,./{}|<>?\"你好啊我们";$otherStrpreg_replace("/[chr(128)-chr(256)]/is"," ",$words);ech…