container.setLayout(grid2);有问题,但不知怎么改,

解决方案 »

  1.   

    运行时有空指针异常,需要加上一句container=new Container();但是为什么layout没改变我也不知道。但是container.setLayout(grid2);和container.setLayout(grid1);确实是执行了。
      

  2.   

    too easy,改成这样就没问题了import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class GridLayoutDemo
        extends JFrame
        implements ActionListener {
        private JButton buttons[];
        private final String names[] = {
            "one", "two", "three", "four", "five", "six"};
        private boolean flag = true;
        private Container container;
        private GridLayout grid1, grid2;    public GridLayoutDemo() {
            super("GridLayout Demo");
            grid1 = new GridLayout(2, 3, 5, 5);
            grid2 = new GridLayout(3, 2);        container = getContentPane();
            container.setLayout(grid1);        buttons = new JButton[names.length];        for (int count = 0; count < names.length; count++) {
                buttons[count] = new JButton(names[count]);
                buttons[count].addActionListener(this);
                container.add(buttons[count]);
            }
            this.setSize(300, 150);
            this.setVisible(true);
        }    public void actionPerformed(ActionEvent e) {
            if (flag)
                container.setLayout(grid2);
            else
                container.setLayout(grid1);        flag = !flag;
            container.validate();
        }    public static void main(String agrs[]) {
            GridLayoutDemo application = new GridLayoutDemo();
            application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
      

  3.   

    原因:构造函数里container是局部变量,而actionPerformed方法里container是全局变量.解决办法我在楼上给出了,楼主结贴给分吧.