2014-09-11 150 views
0

每當我將JFrame的佈局更改爲null,而不是實際設置它時,JPanel永遠不會被添加。我不確定爲什麼和我沒有找到關於此主題的足夠信息。這裏是我的JFrame類:在空佈局jframe上佈局佈局

public class Frame extends JFrame 
{ 
public Frame() { 
    super("frame"); 
    this.setLayout(null); 
    this.setIconImage(Toolkit.getDefaultToolkit().getImage(Main.class.getProtectionDomain().getClassLoader().getResource("icon.png"))); 
    this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    this.setSize(1250, 550); 
    this.getContentPane().setBackground(Color.GRAY); 
} 

}

此處,我實例化的JFrame:

public static Frame frame; 
public static void initialize() 
{ 
    frame = new Frame(); 
    CardLayout cardLayout = new CardLayout(); 
    PanelContainer panelContainer = new PanelContainer(cardLayout); 

    panelContainer.setLayout(cardLayout); 

    JPanel panel1 = new Panel1(); 
    JPanel panel2 = new Panel2(); 

    panelContainer.add(panel1, "panel1"); 
    panelContainer.add(panel2, "panel2"); 

    cardLayout.show(panelContainer, "panel1"); 

    gui.add(panelContainer, null); 

    gui.validate(); 
    gui.setVisible(true); 
} 

這裏的面板容器類:

public class PanelContainer extends JPanel 
{ 
public PanelContainer(CardLayout cardLayout) 
{ 
    super(cardLayout); 
    this.setVisible(true); 
    } 
} 

最後這裏是面板1和2,他們有相同的代碼:

public class Panel1 extends JPanel 
    { 
    public Panel1() 
    { 
    super(); 
    this.setBackground(Color.GRAY); 
    addButtons(this); 
} 
    public static void addButtons(FrontPanel panel) 
{ 
    JButton testButton = new JButton(new ImageIcon(Images.TestImage); 
    testButton (30,30); 
    testButton (0,0); 
    panel.addtestButton 
} 
} 

謝謝您的時間和幫助!

回答

5

幾個問題:

  • 當你給一個容器,一個空的佈局,你的編碼器成爲指定所有添加的組件的大小和位置完全負責。
  • 如果您不這樣做,則添加的組件的大小爲0。
  • 話雖如此,你應該幾乎從不使用空佈局,因爲它導致GUI不靈活,幾乎不可能升級和調試。
  • 你的代碼還顯示了靜態一切的總體過度使用,這表明你可能在嘗試創建複雜的GUI之前學習Java OOPs概念。創建靜態方法和字段會導致難以增強的代碼,這些代碼不能被繼承,並且很難測試,包括單元測試。

順便說一句,我沒有看到你添加什麼東西到JFrame。你似乎正在使用一個永遠不會聲明或初始化的變量gui。你的框架變量被命名爲框架 - 可以gui和框架是一回事嗎?你是否錯過了我們的代碼?


編輯

...並作爲靜態的 「一切」 的過度使用;我是新來的Java,我試圖使用靜態更好,問題是我不完全知道它的意義。

這就是爲什麼我強烈建議你學習Java面向對象編程的概念之前試圖建立一個複雜的圖形用戶界面。否則,你有可能把車放在馬前。

的另一件事是因爲我想了很多了一切控制的,我不使用佈局,

這也正是佈局管理器爲你做。你認爲無效佈局更好的標誌着你作爲一個尚未掌握佈局管理者權力的新手。一旦你這樣做了,你就會明白爲什麼關於這個網站上的null佈局的大多數類似的問題得到類似於我的迴應。

尋找oracle文檔我沒有找到一個佈局,讓我這樣做。也許你可以建議一些東西給我使用?

您通常不會只使用一種佈局。我經常嵌套JPanels,每個人都使用編程友好的佈局管理器,並且以這種方式可以構建令人愉快並易於調整和增強GUI的工具。至於建議 - 我不知道你的程序應該如何顯示,所以目前我無法給出具體的建議。

好運!

+0

哎呀抱歉,我錯誤地轉載了它,gui應該是框架。對不起,對於過度使用靜態的「一切」;我是新來的Java,我試圖使用靜態更好,問題是我不完全知道它的意義。另一件事是我不使用佈局,因爲我想要控制所有的東西,在Oracle文檔中查找我沒有找到能夠讓我這樣做的佈局。也許你可以建議一些東西給我使用?謝謝你的幫助! – SuperBrea 2014-09-11 16:54:03

+0

@SuperBrea:請參閱編輯回答。 – 2014-09-11 16:58:22