2013-10-20 209 views
0

我在一個項目中使用GridBagLayout我一直在努力,問題是,當我在我的電腦或其他人在我的uni編譯時,它正確顯示了我希望它是如何。佈局問題 - Java

Proper way

但是,當我一個不同的PC上運行它,它會顯示不同,左上面板和雷達面板並不像他們應該。

Wrong way

我們都有相同的JDK和使用NetBeans 7.3,所以我不知道問題出在哪裏。

這是我用來將面板添加到框架的方法。

private void agregarPaneles() { 

    this.setLayout(new GridBagLayout()); 
    GridBagConstraints gbc = new GridBagConstraints(); 
    gbc.insets = new Insets(10, 10, 10, 10); 
    gbc.gridx = 0; 
    gbc.gridy = 0; 
    gbc.gridwidth = 1; 
    gbc.gridheight = 1; 
    add(scrollerVuelos, gbc); 
    gbc.gridx = 1; 
    gbc.gridy = 0; 
    gbc.gridwidth = 1; 
    gbc.gridheight = 1; 
    add(panelEstado, gbc); 
    gbc.gridx = 2; 
    gbc.gridy = 0; 
    gbc.gridwidth = 1; 
    gbc.gridheight = 1; 
    add(panelOrdenes, gbc); 
    gbc.gridx = 0; 
    gbc.gridy = 1; 
    gbc.gridwidth = 3; 
    gbc.gridheight = 1; 
    add(panelRadar, gbc); 

} 

回答

2

你不夠發佈的代碼給你一個確切的答案,但一般:

如果GridBagLayout中沒有足夠的空間,在其首選大小來顯示組件,然後將使用組件的最小尺寸。由於許多組件具有較小的最小尺寸,組件可以縮小至幾乎不變。

所以你可能需要看看在面板上設置最小尺寸。您還可以查看weightX和weighty值,因爲它們會影響組件的大小調整。

有關更多信息和示例,請參閱How to Use GridBagLayout的Swing教程。

還記得你可以使用不同的佈局管理器嵌套面板,如果這使得佈局更容易。例如,也許主佈局應該是一個BorderLayout。然後在NORTH中使用GridLayout添加一個面板。在CENTER中添加您的其他面板。

+0

的確,我設置最小尺寸,它工作正常,但我不明白爲什麼它在某些計算機上工作,而不是在其他人與相同的JDK。 – sandiego

+0

@sandiego因爲不同的計算機使用不同的渲染技術,字體指標和其他元素將適合的元素引入系統,這就是爲什麼你應該總是我們的佈局經理;) – MadProgrammer

2

組件的首選尺寸可能不符合框架的可用空間,並且GridBagLayout正在恢復使用組件的最小尺寸。

你可以使用GridBagConstraints#weightxGridBagConstraints#weightyGridBagConstraints#fill = GridBagConstraints.BOTH,試圖迫使組件使用,您應該還可以使用Frame#pack收拾框架而不是將其設置手動的規模是在細胞內

的整個可用空間,這將嘗試框架的大小,以便它可以滿足內容的首選大小的要求