我注意到在boxlayout中設置最大大小時有些奇怪。setMaximumSize對排列在boxlayout中的JPanel的影響
我需要一列沿着窗口右側的面板,我試着用一個盒子佈局來設置它。可能會有8-10個,也可能有30-40個,所以我給他們足夠的空間來解釋30-40,但是如果只有8-10個,他們就會佔用所有可用空間,而且看起來很奇怪。所以我想我會設置他們的最大大小來阻止它的發生......
......我一直在結束大部分消失。所以我把它分解成一個非常基本的彩色面板堆棧,試圖看看發生了什麼,我已經想出瞭如何繼續,但我不喜歡它。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BoxLayoutDemo extends JFrame {
public BoxLayoutDemo() {
super("JScrollPane Demonstration");
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
init();
setVisible(true);
}
public void init() {
setLayout(null);
JPanel rightPanel = new JPanel();
rightPanel.setBounds(400,0,400,600);
rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.PAGE_AXIS));
JPanel greenPanel = new JPanel();
JPanel bluePanel = new JPanel();
JPanel yellowPanel = new JPanel();
greenPanel.setBackground(Color.GREEN);
bluePanel.setBackground(Color.BLUE);
yellowPanel.setBackground(Color.YELLOW);
rightPanel.add(greenPanel);
rightPanel.add(bluePanel);
rightPanel.add(yellowPanel);
add(rightPanel);
}
public static void main(String args[]) {
new BoxLayoutDemo();
}
}
......這就是你所期望的:三個彩色的盒子佔據了屏幕的右半部分。
如果我添加類似:
greenPanel.setMaximumSize(new Dimension(400,100));
bluePanel.setMaximumSize(new Dimension(400,100));
yellowPanel.setMaximumSize(new Dimension(400,100));
然後,而不是三個彩色框均只有100像素高,只佔用上半左右的屏幕,這也是我所期待什麼。
但如果我這樣做...
greenPanel.setMaximumSize(new Dimension(400,100));
yellowPanel.setMaximumSize(new Dimension(400,100));
藍色面板都擊碎其他兩個下降到只有幾個像素高大。
這可能不會是一個問題,我可以爲所有事情設置最大尺寸,但在假設情況下,這不是真的可行,是否有方法來改變這種行爲,或者是這樣盒子的佈局是什麼?
編輯:
好了,我們會打電話給test1的是:
greenPanel.setMinimumSize(new Dimension(400,100));
yellowPanel.setMinimumSize(new Dimension(400,100));
...因爲綠色和黃色面板大約200像素高反正這對任何事情沒有影響。
測試2:
greenPanel.setMaximumSize(new Dimension(400,100));
yellowPanel.setMaximumSize(new Dimension(400,100));
...使得藍光面板擠掉最初描述的綠色和黃色的。
TEST3:
greenPanel.setMinimumSize(new Dimension(400,100));
greenPanel.setMaximumSize(new Dimension(400,100));
yellowPanel.setMinimumSize(new Dimension(400,100));
yellowPanel.setMaximumSize(new Dimension(400,100));
...應該導致綠色和黃色板是100像素高,因爲你在實踐中所描述的,不同的是實際發生的事情是完全一樣的東西在TEST2。
不硬編碼的大小,永遠。從來沒有想過一個空佈局,也沒有干擾組件的大小提示(http://stackoverflow.com/questions/7229226/should-i-avoid-the-use-of-setpreferredmaximumminimumsize-methods-in-java-swi/7229519# 7229519)。選擇一個滿足您需求的LayoutManager並允許微調f.i. MigLayout(或者如果你被困在核心管理器,GridBagLayout中)。 – kleopatra 2012-07-14 08:42:19
是啊,是Java俱樂部的第一條規則。除非佈局管理者不會真正地使視覺材料的尺寸標定得很好,除非我採取額外的措施,否則無論如何都會使用空佈局。我對宗教對編程公約的態度不感興趣。 – user1299656 2012-07-14 17:16:42
聳聳肩,它是_your_你在浪費堅持做錯事情的時間... – kleopatra 2012-07-15 08:35:50