初学JAVA,在做一个布局管理器的练习,我在Box里面放了一个JPanel,想让JPanel的高度一定,而宽度随着窗口大小的变化而变化,于是我为这个JPanel加了MinimumSize和MaximumSize,但是奇怪的是,MaximumSize的宽度只显示了一半,不知为何,忘高手指教测试代码如下:
import java.awt.*;
import javax.swing.*;
public class Test extends JFrame {
private static final long serialVersionUID=20110118L;
public Test() {
Container container=this.getContentPane();
this.setSize(300, 200);

Box box=Box.createVerticalBox();
box.setOpaque(true);
box.setBackground(Color.WHITE);
container.add(box);

JPanel panel=new JPanel(new GridBagLayout());
panel.setBackground(Color.GRAY);
panel.setMinimumSize(new Dimension(0,50));
panel.setMaximumSize(new Dimension(1000,50)); //我最大化窗口后这个JPanel的宽度只有500,这是为什么
box.add(panel);

this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Test();
}}

解决方案 »

  1.   

    Box box=Box.createVerticalBox();
    改成 
    Box box = new Box(BoxLayout.LINE_AXIS);
    就能达到1000
    不过panel的位置由顶部到了中间。
      

  2.   

    Box太神奇了、、、、、
    Box box = new Box(BoxLayout.X_AXIS);也可以
    只是panel 也就到中间显示了、、
      

  3.   

    …………其实,那个无论是LINE_AXIS或者是X_AXIS都是HorizontalBox,而不是VerticalBox
    所以宽度能达到1000也不奇怪,就像在VerticalBox里面高度能达到50一样,MaximumSize的宽度和高度反过来,高度一样只能达到500代码如下:
    import java.awt.*;
    import javax.swing.*;
    public class Test extends JFrame {
        private static final long serialVersionUID=20110118L;
        public Test() {
            Container container=this.getContentPane();
            this.setSize(300, 200);
            
            Box box=new Box(BoxLayout.LINE_AXIS); //即使改成这样,结果其实是一样的,只是一个是横向BOX,而另一个是纵向BOX而已
            box.setOpaque(true);
            box.setBackground(Color.WHITE);
            container.add(box);
            
            JPanel panel=new JPanel(new GridBagLayout());
            panel.setBackground(Color.GRAY);
            panel.setMinimumSize(new Dimension(50,0));
            panel.setMaximumSize(new Dimension(50,1000)); //这里高度只能达到500了,BOX真是太奇怪了
            box.add(panel);
            
            this.setVisible(true);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        public static void main(String[] args) {
            new Test();
        }}