1,用JPanel panel=new JPanel();
      panel.setLayout(new GridbagLayout());
      frame.add(panel);
     与用Container myContentPane=this.getContentPane();
         myContentPane.setLayout(new GridbagLayout());
     的区别是不是JPanel需要添加到容器,即frame.add(panel);
     而Container这个dd是JFrame自带的相当于JPanel的容器吗?这两者还有其他区别吗?那个用好一点?
   2,public static void main(String[] args) {
setDefaultLookAndFeelDecorated(true);
new Calculator("简易计算器");
}中设置窗体外观时,为什么用new Calculator("简易计算器").setDefaultLookAndFeelDecorated(true);这样设置不行,我觉得
      静态方法用实例来访问也是可以的

解决方案 »

  1.   

    设置外观应该直接在main方法里面用JFrame方法调用,因为它只是JFrame类的一个静态方法,public static void main(String[] args)
    {
       JFrame.setDefaultLookAndFeelDecorated(true); --这样调用的
       ....................................
    }至于你说的要先增加一个组件的问题:
    我也在书上面看到过:
    解释如下:
    JFrame是一个Frame类的子类,但是Frame和JFrame中添加组件时采用的方法不同。在JFrame实例中增加一个组件,不是直接用add()方法,而是先调用如下方法得到JFrame的内容窗格:
      Container getContentPane()
    然后使用容器的add()方法在内容窗格中增加一个组件.方法如下所示:
    void add(comp)
    这里,comp是增加到内容窗格中的组件.
    如:要在frame中添加按钮b,方法如下
    frame.getContentPane().add(b);可是我也试过了可直接添加的

    public class Test
    {
      public static void main(String[] args)
      {
         JFrame.setDefaultLookAndFeelDecorated(true);
         new MyFrame();
      }
    }class MyFrame extends JFrame
    {
       public MyFrame()
       {
         setTitle("Test");
         setDefaultCloseOperation(EXIT_ON_CLOSE);
         MyPanel panel = new MyPanel();
         add(panel);
         setSize(400,300);
         setVisible(true);
       }
    }public MyPanel extends Panel
    {
        private JButton btn = new JButton("退出");
         
        public MyPanel()
        {
           add(btn);
        }
    }可以直接用add添加啊!对此我也很迷惑.
      

  2.   

    关于1:
    如果你JPanel panel=new JPanel(...
    然后frame.add(panel)
    是在frame的内容窗格(ContentPane)中又增加了一个容器panel,如果你不frame.add(panel),则这个panel和frame没任何关系;
    frame的ContentPane是Container的子类,
    可以了解一个面向对象的知识.
    关于2:
    如果你的类中(包括父类中)有setDefaultLookAndFeelDecorated(),就可以使用new 类名().setDefaultLookAndFeelDecorated(...);来调用.