先setLayout(null)
再setBounds()

解决方案 »

  1.   

    用GridBagLayout或者FlowLayout,总之换布局管理器就行了~~
      

  2.   

    我晕。能设置为FlowLayout???这个是按行排的!
    至于GridBagLayout更不好控制!
    不要想的过于简单。
      

  3.   

    在JPanel上再添加JPanel,知道布局令你满意为止,别说这个方法不行,这是比较苯的办法,上面有setBounds()你不用,那就用这个吧
      

  4.   

    试试先在JPanel设一个BorderLayout,在Center内再用GridLayout.
      

  5.   

    试试jpanel.setLayout(new GridLayout(0,5))
      

  6.   

    这是你想要的效果:import java.awt.*;
    import javax.swing.*;
    public class Test {
    public static void main(String[] args) throws Exception{
    JFrame frame = new JFrame();
        Container c = frame.getContentPane();
    c.setLayout(new BoxLayout(c,BoxLayout.Y_AXIS));
    addAButton("Button 1",c);
    addAButton("Button 2",c);
    addAButton("Button 3",c);   
        frame.setSize(200,200);
        frame.setVisible(true);
    }
    private static void addAButton(String text,Container container) {
            JButton button = new JButton(text);
            button.setAlignmentX(Component.CENTER_ALIGNMENT); 
            container.add(Box.createVerticalGlue());
            container.add(button);
            container.add(Box.createVerticalGlue());
        }
    }
    信誉值低,如果问题解决,请结贴。
      

  7.   

    如果考虑用jbulider
    可以用它里面的xy布局~~
    会方便很多~~~
      

  8.   

    FlowLayou会根据当前组件自动调整位置关系,可没说就是横着排啊,如果外层的JPanel特窄的话里面的组件自然就变成竖着的了,看看这个,效果和那个图片一模一样
    package test;import java.awt.*;
    import javax.swing.*;public class TestLayout extends JPanel {  public TestLayout() {
        try {
          jbInit();
        }
        catch(Exception e) {
          e.printStackTrace();
        }
      }
      public static void main(String[] args) {
        JFrame f = new JFrame();
        f.getContentPane().add(new TestLayout());
        f.setSize(120, 450);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
      }
      private void jbInit() throws Exception {
        this.setLayout(new FlowLayout(FlowLayout.CENTER, 50, 20));
        for(int i=0; i<3; ++i){
          JButton btn = new JButton();
          btn.setBackground(Color.red);
          btn.setBorder(null);
          btn.setMaximumSize(new Dimension(60, 60));
          btn.setMinimumSize(new Dimension(60, 60));
          btn.setPreferredSize(new Dimension(60, 60));
          this.add(btn);
        }
        JLabel lab = new JLabel();
        lab.setMaximumSize(new Dimension(60, 60));
        lab.setMinimumSize(new Dimension(60, 60));
        lab.setPreferredSize(new Dimension(60, 60));
        this.add(lab);    JLabel lab2 = new  JLabel("JPanel");
        lab2.setFont(new java.awt.Font("Dialog", 0, 28));
        lab2.setForeground(Color.red);
        this.add(lab2);    this.setBackground(Color.cyan);
        this.setMinimumSize(new Dimension(120, 450));
      }
    }
    就是点问题,由于采用FlowLayout,所以横向不能再缩小,但纵向还能再缩小
      

  9.   

    BoxLayout虽然可以保证有最小的外观大小,但是每次改变大小时所有组件之间的距离会动态变化