2011-11-13 228 views
1

嗨我正在處理一個問題,我在Swing中有一些問題。我對擴展JFrame或JComponent的類沒有任何問題,但是當我嘗試使用我編寫的擴展JPanel的類時,它將不會顯示出來,並且我沒有在該面板上調用任何內容,包括添加自定義JComponents它。創建JPanel擴展類的一般過程是什麼,然後將其設置爲JFrame中使用的內容窗格?問題擴展JPanels

+2

「擴展」指的是,一個關係。除非你製作一個輕量級容器,否則不要擴展'JPanel'。 – Jeffrey

+1

如需獲得更多幫助,請提供代表[sscce](http://sscce.org/)。 – trashgod

回答

2

您應該添加將Jpanel擴展到容器中的類,如JFrame.A繼承JPanel的類不會顯示任何內容,因爲它不是容器組件。

3

我(我的個人觀點)看不出什麼錯延伸JComponentJComponentJPanelJLabel,更Inheritance versus composition,例如

import java.awt.*; 
import javax.swing.*; 

public class CustomComponent extends JFrame { 

    private static final long serialVersionUID = 1L; 

    public CustomComponent() { 
     setTitle("Custom Component Test"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     add(new CustomComponents()); 
     pack(); 
     setMinimumSize(getSize());// enforces the minimum size of both frame and component 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       CustomComponent main = new CustomComponent(); 
       //main.display(); 
      } 
     }); 
    } 
} 

class CustomComponents extends JComponent { 

    private static final long serialVersionUID = 1L; 

    @Override 
    public Dimension getMinimumSize() { 
     return new Dimension(100, 100); 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return new Dimension(400, 300); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     int margin = 10; 
     Dimension dim = getSize(); 
     super.paintComponent(g); 
     g.setColor(Color.red); 
     g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2); 
    } 
}