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.pswp.cn/news/443226.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443226.shtml
英文地址,請注明出處:http://en.pswp.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…