2013-08-16 18 views
-3

我試圖用多個按鈕創建一個顯示。但是,只有一個按鈕正在顯示。這是爲什麼發生?這是佈局經理的事嗎?我哪裏做錯了?在java中只顯示一個按鈕awt

我的代碼:

import java.awt.*; 
class ButtonDemo extends Frame 
{ 
    Button[] b;Frame frame; 
    ButtonDemo() 
    { 
     int i=0; 
     b=new Button[12]; 
     frame=new Frame(); 
     frame.setLayout(new BorderLayout()); 
     for (i=0;i<12;i++) 
     { 
      b[i] = new Button("Hello"+i);frame.add(b[i]); 
     } 
     frame.add(new Button("Hello")); 
     frame.add(new Button("polo")); 
     frame.pack(); 
     frame.setVisible(true); 

    } 

    public static void main(String args[]) 
    { 
     ButtonDemo bd = new ButtonDemo(); 
    } 
} 
+0

,我會建議使用'BoxLayout',否則只需使用'FlowLayout'。雖然,你試圖完成什麼還不清楚。 –

回答

3

這是BorderLayout預期的行爲。

BorderLayout將只允許單個組件駐留在它的5個可用位置中的每一個。

您正在將兩個按鈕添加到同一位置,因此只顯示最後一個按鈕。

的Try ...

  • 添加一個按鈕,BorderLayout.NORTHBorderLayout.SOUTH位置
  • 使用不同佈局的管理

看看A Visual Guide to Layout ManagersLaying Out Components Within a Container瞭解更多詳情...

+0

真的很有幫助。謝謝 – user2601967

0

首先,建議不要將組件添加到框架,而是將它添加到框架容器。最簡單的方法是將JPanel添加到框架的容器,然後將任何後續組件添加到此JPanel。

例如

JFrame customFrame = new JFrame(); 
    JPanel customPanel = new JPanel(); 
    customPanel.setLayout(new BorderLayout()); 
    customFrame.getContentPane().add(customPanel); 
    //add your buttons to customPanel 

其次你已經延伸架,然後你爲什麼要再次創造了它的框架的自定義類ButtonDemo?在你的情況,你可以直接說,而不是創建一個單獨的框架,並添加組件/佈局,它

setLayout(new BorderLayout()); // equivalent to this.setLayout(new BorderLayout()); 
add(new Button("polo")); 

您將框架的佈局設置爲BorderLayout,但不使用它的任何功能。

frame.setLayout(new BorderLayout()); 

如果你希望你的按鈕,在您的願望位置(說NORTH),你必須重新指定所以

frame.add(new Button("Hello"),BorderLayout.NORTH); 

如果你想在北位置的多個按鈕,然後用面板與的BoxLayout(水平或垂直無論你的要求),然後添加你的按鈕。

1

MadProgrammer說,這是因爲BorderLayout 只是聲明另一個佈局,它應該工作:如果你希望所有的組件垂直或水平顯示

import java.awt.*; 
class ButtonDemo extends Frame 
{ 
    Button[] b;Frame frame; 
    ButtonDemo() 
    { 
     int i=0; 
     b=new Button[12]; 
     frame=new Frame(); 
     frame.setLayout(new BorderLayout()); 
     for (i=0;i<12;i++) 
     { 
      b[i] = new Button("Hello"+i);frame.add(b[i]); 
     } 
     frame.add(new Button("Hello")); 
     frame.add(new Button("polo")); 
     setLayout(new FlowLayout()); 
     frame.pack(); 
     frame.setVisible(true); 

    } 

    public static void main(String args[]) 
    { 
     ButtonDemo bd = new ButtonDemo(); 
    } 
}