我創建了一個帶有JPanel的窗體,裏面有一些圖形和一些按鈕來控制事物。出於某種原因,我必須指定JPanel的寬度比要放入其中的實際圖形小10px,並且低30px。什麼導致這個問題?JPanel周圍不需要的邊框
這是代碼:
public class Window {
public Sheepness sheepness;
public ButtonPanel buttonPanel;
public PaintPanel paintPanel;
public JFrame frame;
public Window(Sheepness sheepness) {
this.sheepness = sheepness;
frame = new JFrame("Sheepness simulation");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.setSize(width, height);
BorderLayout frameLayout = new BorderLayout();
JPanel background = new JPanel(frameLayout);
background.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
buttonPanel = new ButtonPanel(this);
background.add(BorderLayout.SOUTH, buttonPanel.buttonBox);
paintPanel = new PaintPanel(this);
paintPanel.setPreferredSize(new Dimension(320, 240));
background.add(BorderLayout.CENTER, paintPanel);
frame.getContentPane().add(background);
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
}
}
public class PaintPanel extends JPanel {
public Window window;
public PaintPanel(Window window) {
this.window = window;
}
@Override
public void paintComponent(Graphics g) {
g.setColor(Color.blue);
g.fillRect(0, 0, 320, 240);
}
}
截圖爲320×240一個首選大小:
Can't find source image http://www.cmbi.ru.nl/~estens/Sheepness/Sheepness_simulation_border.png。
您可以看到320 x 240 fillRect未完全填充JPanel,仍保留10 px寬度和30 px高度的邊框。
截圖與310 X 210使用preferredSize:
Can't find source image http://www.cmbi.ru.nl/~estens/Sheepness/Sheepness_simulation_noBorder.png。
現在它正好適合320 x 240 fillRect!
任何想法?
嘗試添加'Border'('BorderFactory.createLineBorder(Color.RED,1)')圍繞'paintPanel'這樣就可以排除用'buttonPanel'相互作用。 – 2009-10-20 12:19:11
我用setPreferredSize:參數:寬度:640,高度:480,在setPreferredSize和setSize:Width:640,Height:480,frame.pack:Width:650,Height:510之後設置它後,檢查了JPanel的大小。我想它與包裝一切的算法有關。不過,尺寸增加並不奇怪嗎?有沒有辦法告訴事情停止觸摸我的組件的大小,只是他們的路線?我認爲這應該是setPreferredSize,但我猜這不符合它的要求。 – FinalArt2005 2009-10-20 13:21:18
順便說一句,添加邊框顯示與buttonPanel沒有任何交互,因爲它顯示JPanel與按鈕很好地排列在一起,但正如您可以從之前的註釋中讀取的那樣,JPanel本身在打包後尺寸錯誤。 – FinalArt2005 2009-10-21 17:26:34