我對Java的佈局管理器有個討厭的問題。我有以下情況:在面板A是兩個其他面板B與絕對佈局和C與FlowLayout。 B高度定製,並通過setPreferredSize
設置固定大小。 C應該具有相同的固定寬度爲B但其他方面的高度可變,具體取決於流中添加了多少組件。由此產生的A應該具有固定寬度並且A.height + B.height
作爲高度 - 至少這是我想要的。JPanel中的固定寬度,可變高度,流量爲
但是我所得到的是,面板甲不固定在所有(即使我設置其優選的大小),並且在面板內容Ç寬度不會自動包裝而是被顯示在排長隊。當然這也使得B具有比它應該更大的寬度。
我能做些什麼來解決這個問題?有沒有更好的佈局,還是我必須使用絕對佈局來模擬全部?
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Test extends JPanel
{
public Test()
{
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
JPanel top = new JPanel(null);
top.setBackground(Color.GREEN);
top.setPreferredSize(new Dimension(200, 20));
JPanel flowPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 2, 2));
this.add(top);
this.add(flowPanel);
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
flowPanel.add(new JButton("x"));
}
}
這實際上工作得很好!如果沒有人提出本地解決方案,這就是我將要使用的。謝謝!太糟糕了,標準佈局經理在這樣的常見情況下(至少對我來說)總是失敗,而且你總是會得到一個新的自定義的..:/ – poke 2010-09-06 16:10:05
@poke:對我來說,這代表了一種選擇偏見 - 我傾向於忘記標準佈局通常只是工作! 'WrapLayout'也是編寫自己的經理的好例子。 – trashgod 2010-09-06 16:33:44