2012-04-18 44 views
-1

首先,我已經通過this相關的問題,但不能得到它的工作。如何在JFrame中「打包」JPanel?

現在,我的問題: 我有一個JFrame,內部包含一個JPanel,它是動態繪製的。現在,當我畫這個面板時,它佔據了整個屏幕,並擴展到邊緣。我在面板上使用了BoxLayout.Y_AXIS。

如何麪包車我做到這一點?

我已附上截圖:

我得到了什麼: What i got

我想要什麼:

What i want

編輯:添加源代碼(最小化,而不是實際的)

public class DialogReportsMain extends JDialog implements ActionListener 
{ 
    public DialogReportsMain(JFrame mParent, boolean isModal) 
    { 
    /*******************************************/ 

    setLayout(new BorderLayout(0, 0)); 

     /***************************************/ 
     addNorthContent(this); 
     addWestContent(this); 
     addSouthContent(this); 

     /***************************************/ 
    JPanel mOrderHeaderContainer = new JPanel(); 
    mOrderHeaderContainer.setLayout(new BoxLayout(mOrderHeaderContainer, BoxLayout.Y_AXIS)); 

     /***************************************/ 
     // Table Number 
     JLabel mLabelTableNumber = new JLabel("Table: " 
               + new Integer(mOrderDetails.mTableNumber).toString()); 
     mOrderHeaderContainer.add(mLabelTableNumber); 

     /***************************************/ 
     // Dates 
     JPanel mPanelDates = new JPanel(); 
     mPanelDates.setLayout(new GridLayout(1, 2, 20, 0)); 

      JLabel mLabelReceivedDateTime = new JLabel(mOrderDetails.mReceivedDateTime); 
      mPanelDates.add(mLabelReceivedDateTime); 

      JLabel mLabelBillDateTime = new JLabel(mOrderDetails.mBillDateTime); 
      mPanelDates.add(mLabelBillDateTime); 

     mOrderHeaderContainer.add(mPanelDates); 

     /***************************************/ 
     // Waiter Details 
     JLabel mLabelWaiterDetails = new JLabel("Waiter: " 
               + new Integer(mOrderDetails.mWaiterId).toString() 
               + " (" 
               + mOrderDetails.mWaiterName 
               + ")" 
               ); 
     mOrderHeaderContainer.add(mLabelWaiterDetails); 

     /***************************************/ 
     // Blank Lines 
     mOrderHeaderContainer.add(new JLabel()); 
     mOrderHeaderContainer.add(new JLabel()); 

    /***************************************/ 
      add(mOrderHeaderContainer, BorderLayout.CENTER); 


    /*******************************************/ 
    setTitle("Reports"); 
    setModalityType(ModalityType.MODELESS); 
    setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
    setResizable(true); 
    setMinimumSize(new Dimension(100, 400)); 
    makeDialogFullScreen(this); 
    setLocationRelativeTo(null); 
    } 
} 
+0

你可以叫包()實現上將JFrame打包成最適合的窗口。 – mino 2012-04-18 11:11:01

+0

@mino:我打算「打包」的面板容器也是一個面板,並且嵌套在很大程度上。那麼,在這種情況下你的建議會起作用嗎? – 2012-04-18 11:13:21

+0

我相信,如果你在實際的JFrame上調用pack並且在你的JPanel上沒有設置大小約束,它應該可以工作。 – mino 2012-04-18 11:18:44

回答

1
  • 方法pack()完成輸出到基於

    屏幕a)所用LayoutManager

    b)Size/PrefereredSize

    所有元素retured當前Component的層次

  • BoxLayout默認Size/PrefereredSize接受,請注意這個屬性可能會有所不同,每的LayoutManager小號

+0

dats相關信息, thnx ...但無法讓我的問題得到解決 – 2012-04-18 11:34:33

+0

@AndrewThompson:明白了......從現在開始要小心...... – 2012-04-18 11:39:49