我最近在书上看了java的3种布局管理器类:总结下来是:
1、border layout manger 可以把面板分成*行*列
2、flow layout manger   默认的布局管理器,组件添加上去一行空间不够会显示到下一行
3、gridbag layout manger 这个比较复杂,可以对每个组件的效果进行设置和约束另外还有一个类我一直弄不清,JPanel 类 ,。
我把JFrame类看成是框架,JPanel类看成是容器。就跟房子的框架和墙一样。
但是我今天看到个列子,程序中没有定义JPanel类,而直接使用JFrame.
这样做程序怎么可行?还有大家写项目的时候用哪一类的布局管理器,给些编写java表陈框架建议给我,谢谢。上面说的错误也请大家指正!

解决方案 »

  1.   

    JFrame是窗口容器
    JPanel不能做窗口容器  就这点区别
    布局管理器都是结合着用 一个套一个
      

  2.   

    既然JFrame也可以装组件,我把下面代码中的JPanel容器去掉,为什么运行结果就不正确(能编译,能运行),代码作用是点击按钮把背景颜色变黄,我把代码贴出来:
    import java.awt.*;
    import java.lang.*;
    import java.util.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class ButtonTest
    {
    public static void main(String[] args){
    ButtonFrame frame=new ButtonFrame();
    frame.setVisible(true); 
    }
    }class ButtonFrame extends JFrame
    {
    public ButtonFrame(){
    setTitle("ButtonTest");
    setSize(300,200);//Create Button
    JButton yellowButton=new JButton("yellow");
    buttonpanel=new JPanel();
    //add to Frame
    add(buttonpanel);
    buttonpanel.add(yellowButton);
    ColorAction yellowAction=new ColorAction(Color.YELLOW);
    yellowButton.addActionListener(yellowAction);
    }
    private class ColorAction implements ActionListener
    {
    public ColorAction(Color c){
    backgroundColor=c;
    }public void actionPerformed(ActionEvent event)
    {buttonpanel.setBackground(backgroundColor);
    }  private Color backgroundColor;
    }
    private JPanel buttonpanel;
    }
    我把Button组件直接添加到Frame中不经过JPanel后就得不到正确结果,求解释!!!
      

  3.   

    1、border layout manger 可以把面板分成*行*列
    2、flow layout manger 默认的布局管理器,组件添加上去一行空间不够会显示到下一行
    3、gridbag layout manger 这个比较复杂,可以对每个组件的效果进行设置和约束这三个总结也是有出入的
    1.BorderLayout 分成北 南 中 左 右
    2.FlowLayout是JPanel的默认,JFrame的默认是BorderLayout
    3.这个倒是没错
      

  4.   

    得看你是怎么把panel去掉的?
    只是把add(buttonpanel);给去掉了?
    还是怎么去掉的?action里实打实的写着buttonpanel,去掉了之后这句怎么改的?
      

  5.   

    JFrame的确可以做容器,而且可以不通过JPanel添加组件,虽然这本身并不是好的做法
    至于你说的去掉JPanel不行,那是因为你这个具体的代码的问题,你没有设计好导致了编译错误罢了
    下面给你贴一个可以跑的import java.awt.*;
    import java.lang.*;
    import java.util.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class ButtonTest
    {
        public static void main(String[] args){
            ButtonFrame frame=new ButtonFrame();
            frame.setVisible(true);
        }
    }class ButtonFrame extends JFrame
    {
        public ButtonFrame(){
            setTitle("ButtonTest");
            setSize(300,200);//Create Button
            JButton yellowButton=new JButton("yellow");
            textField=new JTextField("尚未点击");
    //        buttonpanel=new JPanel();
    ////add to Frame
    //        add(buttonpanel);
    //        buttonpanel.add(yellowButton);
            this.setLayout(new BorderLayout());
            this.add(yellowButton,BorderLayout.CENTER);
            this.add(textField,BorderLayout.EAST);
            ColorAction yellowAction=new ColorAction(Color.YELLOW);
            yellowButton.addActionListener(yellowAction);
        }
        private class ColorAction implements ActionListener
        {
            public ColorAction(Color c){
                backgroundColor=c;
            }        public void actionPerformed(ActionEvent event)
            {//            buttonpanel.setBackground(backgroundColor);
                clickTimes++;
                textField.setText("你已经点击了"+clickTimes+"次");
            }        private Color backgroundColor;
        }
        private JTextField textField;
        private int clickTimes=0;
    //    private JPanel buttonpanel;
    }