2011-10-28 13 views
0

任何人都可以解釋爲什麼pack()在這個JFrame上不起作用嗎?在JFrame中對齊活動呈現的JPanel

它內部有一個JPanel(實際上,它擴展了JPanel - inner)。

下面是我使用的代碼:

inner.setPreferredSize(new Dimension(800, 600)); 
add(inner); 
pack(); 
setResizable(false); 
setLocationRelativeTo(null); // to center the JFrame on screen 
setDefaultCloseOperation(EXIT_ON_CLOSE); 
setVisible(true); 

額外的空間似乎是準確的寬度和Jframe的裝飾的高度(即Jframe的尺寸減去JPanel的尺寸)。

enter image description here

+0

額外的空間在JFrame的底部和右側顯示爲灰色。如果對比度太低,我可以張貼另一張圖片。 – Peter

+0

您是否嘗試通過切換'setUndecorated(boolean v)'? – Jack

+0

我想保持裝飾。但是,如果你很好奇,未修飾窗口的尺寸更精確(雖然,奇怪的是,根據我的測量結果,只有幾個像素)。 – Peter

回答

0

原來我是從JFrame的,而不是JPanel的繪圖(活動渲染)......這樣的額外空間是JPanel的抽籤結果()對象處於0對齊, 0(在JFrame中)。

解決this post

3

調用setResizable(false)之前pack()。這不是巧合,「多餘的空間似乎是JFrame裝飾的確切寬度和高度。」

附錄:這是一個sscce顯示我的初步猜測是不正確的。

enter image description here

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.FlowLayout; 
import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

/** @see http://stackoverflow.com/questions/7924830 */ 
public class NonResizable extends JPanel { 

    public NonResizable() { 
     this.setPreferredSize(new Dimension(400, 300)); 
     this.setBackground(Color.lightGray); 
     this.setBorder(BorderFactory.createLineBorder(Color.blue)); 
    } 

    private void display() { 
     JFrame f = new JFrame("NonResizable"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setLayout(new FlowLayout()); 
     f.setBackground(Color.white); 
     f.add(this); 
     f.pack(); 
     f.setResizable(false); 
     f.setLocationRelativeTo(null); 
     f.setSize(500, 400); 
     f.setVisible(true); 
    } 

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

      @Override 
      public void run() { 
       new NonResizable().display(); 
      } 
     }); 
    } 
} 
+0

如果這沒有幫助,請提供一個[sscce](http://sscce.org/),其中顯示您描述的問題。 – trashgod

+0

它刪除了一些空間,但不是全部。我會一起努力解決問題。 – Peter

+0

我最初的猜測是錯誤的;我已經在上面添加了一個示例。 – trashgod