2013-04-03 91 views
2

很久以來,我一直想知道何時使用JFrame和JPanel。我被教科書,當面和通過互聯網搜索告訴了一些原因,但是當然,這讓我看着Java文檔來發現JPanel具有paintComponent(Graphics);方法,它允許您指定對象本身的操作,與JFrame不同。另外,JPanels是可嵌套的,允許更復雜的圖形,而不是僅使用一個容器就能實現的圖形。我也偶然發現JLabel也是一個容器。 (它甚至有一個驚人的佈局!)現在我的問題是:我應該什麼時候使用JLabel,什麼時候應該使用JPanel?何時使用JFrame,JLabel和JPanel

//我知道你可以把JLabel放入一個JPanel中,並且偶然地發現JPanel比JLabel更昂貴。從長遠來看,我計劃製作一款出納遊戲,其中包含一些輕量級容器,用於點擊時移動到客戶手中的「錢」。我正在考慮使用JLabels來計算貨幣金額(美元賬單和硬幣),而JPanel則用作交易的開銷視圖。我也在考慮在「錢標籤」本身上調用repaint()(據我的理解,它可以模擬動畫)。這是一個雙重問題,但你會認爲這是最簡單的方法嗎?

+3

一般來說,JPanel被用作Container。您將組件(JLabel,JTextField,JTable,JButton等)添加到面板並將面板添加到框架。您可以根據需要使用多個面板。也許可以幫助GIU的佈局。 – camickr

+3

您應該只使用'JFrame'或'JDialog'(或其他頂級容器)來顯示其他容器(如'JPanel')。您應該儘量使用'JPanel'作爲您的所有表單的基線容器,並根據需要嵌套其他面板和控件。這使您可以靈活地在任何您喜歡的頂級容器中顯示您的面板/表單。 – MadProgrammer

+0

我認爲這樣做的主要原因是JLabel的設計主要就是:標籤。它們可以用作容器,並且具有repaint(),paintComponent(),但是如果試圖通過爲JLabel構造函數指定字符串參數來標記容器中的內容(JLabel!),可能會出現問題描述那裏有什麼。另一方面,JPanel是一個Panel,一個GUI的指定部分。鑑於它是一個獨特的部分,它自然是一個容器,因此應該給予這些東西。這一切都有道理! –

回答

9

大多數情況下,JPanel是一個允許更好組織的容器。當你需要組織你的GUI組件時,你應該使用JPanel併爲JPanel定義一個佈局。您也可以將JPanel嵌套在彼此之內等等。JLabel不具備爲JLabel內部顯示的其他組件定義佈局的功能。

0

下面是一個應用程序示例,其中顯示「Hello World !!!」不帶引號:

import javax.swing.JFrame;   
import javax.swing.JPanel;   
import javax.swing.JLabel;   
public class JFrame {   
    public static void main (strings args[]) {   
     JFrame frame = new JFrame();   
     String title = "Hello App";   
     frame.setTitle(title);   
     frame.setSize(300, 200);   
     frame.setDefaultCloseOperation   
      (JFrame.EXIT_ON_CLOSE);   
     frame.setVisible(true);   
     JPanel panle = new JPanel();   
     frame.add(panle);   
     JLabel lable = new JLabel("Hello World!!!");   
     panle.add(lable);   
    } 
} 

文件名是「JFrame.java」,不帶引號。

+0

這似乎並沒有完全回答這個問題,你能擴展嗎? – GHC

+0

你爲什麼要命名JFrame類?這不是已經造成問題嗎? –