2013-03-23 95 views
2

我有JComponent的奇怪問題。我正在嘗試創建自己的JComponent,因此我需要將我的JComponents組合在一起。如何在JComponent中繪製JComponent?

我想畫的JButton在我的JComponent JDial:

public class JDial extends JComponent { 
    private static final long serialVersionUID = 3364481508702147328L; 

    public JDial() {   
     JButton b = new JButton("test"); 
     this.add(b); 
    } 
} 

但這只是畫什麼。更有趣的是,這一個運作良好:

public class JDial extends JPanel { 
    private static final long serialVersionUID = 3364481508702147328L; 

    public JDial() {   
     JButton b = new JButton("test"); 
     this.add(b); 
    } 
} 

的JPanel從JComponent的繼承和內塗料的JButton。 JPanel如何做到這一點?

在此先感謝

+0

你的意思是'JButton'沒有顯示在你以前的代碼中? – 2013-03-23 21:13:38

+0

_I正在嘗試創建自己的JComponent,因此我需要一起組合JComponents_如果「您自己的JComponent」僅僅是現有JComponents的Container,則不需要對它進行子類化。 – Robin 2013-03-24 08:59:48

回答

4

通常,如果要通過重寫paintComponent()方法來執行自定義繪畫,則可以擴展JComponent。

如果你只是想添加一堆組件,那麼你應該使用JPanel。

兩者之間的區別在於,默認情況下,JPanel使用FlowLayout,因此它知道如何佈置添加到它的任何組件。要使JComponent像JPanel一樣,您需要設置佈局管理器並添加自定義繪畫來繪製背景。

1

雖然JComponentContainer下降確實有所有的代碼來重新繪製適當大小和位置的孩子,它沒有調整或佈局他們的任何能力。而且您也沒有爲您的JButton設置大小和位置,因此默認情況下會採用零大小。

不同的是,默認情況下JPanel是使用FlowLayout創建的,這個佈局管理器將主要根據它們計算出的首選大小來設置組件大小。一般來說,直接使用JComponent作爲容器是不常見的,使用JPanel

+0

假設我想創建自己的自定義JComponent我應該如何啓動?我應該在新創建的Jcomponent中包含哪些所有方法。比方說,我想讓我自己的JLabel有和沒有擴展JLabel類? – 2014-05-05 18:39:26