2012-03-18 154 views
1

我試圖給另一個JPanel添加一個JPanel,但是我面臨的問題是第二個Jpanel不會顯示在第一個JPanel上。
我對事物的基本結構如下 -
我有一個JPanel panel1具有BoxLayout並憑藉HorizontalBoxesVerticalBoxes我不斷加入JComponents它。所有JComponents出現在面板1上,第二個JPanel除外。 爲其不會出現在第二JPanel的代碼如下 -Java swing - JPanel上的JPanel沒有顯示

public class LabelMacroEditor extends JPanel implements PropertyChangeListener { 

    private static final long serialVersionUID = 1L; 
    private LabelMacroModel model; 

    public LabelMacroEditor(LabelMacroModel bean) { 

     this.model = bean; 
     model.addPropertyChangeListener(this); 
     setupComponents(); 
     validate(); 
     setVisible(true); 
    } 

    public void setupComponents() 
    { 
     Box allButtons = Box.createVerticalBox(); 
     for(MacroModel macroModel : model.getMacroModelList()) 
     { 
      LabelMacroEditorEditableEntity macroEditorEntity = new LabelMacroEditorEditableEntity(macroModel); 
      Box entityBox = Box.createHorizontalBox(); 
      entityBox.add(macroEditorEntity.getUpButton()); 
      entityBox.add(Box.createHorizontalStrut(15)); 
      entityBox.add(macroEditorEntity.getMacroDetailsButton()); 
      entityBox.add(Box.createHorizontalStrut(15)); 
      entityBox.add(macroEditorEntity.getDownButton()); 

      allButtons.add(entityBox); 
     } 

     add(allButtons); 
    } 

    @Override 
    public void propertyChange(PropertyChangeEvent arg0) { 
     revalidate(); 
    } 

} 

我已經通過將其加入到一個JFrame在一個獨立的方式測試LabelMacroEditor並發現它顯示優良。我假設它與來衝突revalidate/setVisible或類似的東西有關。
我是否缺少明顯的東西?

我可以從JPanel發佈更多的代碼,如果有需要可以添加LabelMacroEditor

編輯: 從那裏IM添加LabelMacroEditor的代碼片段如下 -

private final LabelMacroModel labelMacroModel; 
private LabelMacroEditor labelMacroEditor; 
//code to populate labelMacroModel 
Box verticalBox = Box.createVerticalBox(); 
// Add all other JComponents to verticalBox 
labelMacroEditor = new LabelMacroEditor(labelMacroModel); 
verticalBox.add(labelMacroEditor); 
add(verticalBox); 
+2

請在上面添加面板的代碼。 – 2012-03-18 12:50:14

+1

爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2012-03-18 12:55:41

+2

好的,System.out你的第二個面板的位置和大小,讓我知道結果。 – 2012-03-18 13:00:08

回答

5

我偵察它要麼是你的第一個面板沒有一個佈局管理器,在這種情況下,您需要使用setLayout();

這是因爲第二面板在其內部具有無和因此它的優選的大小爲0。嘗試添加新的JTextArea(10,5);去看看會發生什麼。

+0

現貨。第二個面板裏面什麼也沒有。另外第一個面板也沒有Layout Manager。謝謝。如果「設置pref大小」意味着您實現了自定義組件的getPreferedSize以基於其狀態返回合理的大小提示,那麼接受爲 – ping 2012-03-18 18:16:32

2

我有同樣的問題:

  • 我用佈局
  • TextArea嘗試,以及...並沒有什麼。
  • 是表示用JFrame
  • 其它組分細通常顯示(這是基本的擺動部件)

我通過優選的大小設置爲自定義面板/組件解決這個問題。

+0

,那很好。另一方面,如果您對組件執行setPrefSize,則這是非一次的(有關詳細信息,請參閱http://stackoverflow.com/a/7229519/203657) – kleopatra 2012-09-30 12:50:40