JFrame.setunDecorated LookAndFeel(true)如何正常工作?得到一些奇怪的结果

时间:2012-08-30 10:03:59

标签: java window jframe

所以我有3个JFrame。 JFrame 1(aka opts)用于输入一些变量。在OK上,它创建JFrame 2(也就是视图,图形查看框架)。在构造函数中,即时创建JFrame 3(也称为管理器,用于在图形视图中循环)。 我希望它们与JFrame.setDefaultLookAndFeelDecorated(true)(从现在开始称为“它”)一样装饰在Windows上。

一些不同的案例:

  1. 当我没有设置它时,所有JFrame都是Windows装饰的。
  2. 当我把它放在“opts”或“manager”构造函数中时,运行项目,然后单击OK按钮,所有JFrame都是Windows相似的装饰。
  3. 但是,当我把它放在“视图”构造函数中时,只有“opts”和“view”是Windows装饰的,但“manager”是Java装饰的。
  4. 但是当我把它放在一个只读取文件中的一些数据并从中创建一些对象的类中时,只有“opts”是Windows装饰的。
  5. 它究竟是如何运作的?我想知道为什么会发生这种情况。

    编辑:我无法复制案例4,但仍有一些事情发生,我不明白。尝试评论一些“它”。它会给出一些奇怪的结果。

    package test;
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    public class Frame1 extends JFrame {
      public Frame1() {
        JFrame.setDefaultLookAndFeelDecorated(true);
          Frame1.setOptions(this);
          JButton b1 = new JButton("hi");
          b1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              makeFrame2(2);
            }
          });
          this.add(b1);
        }
    
        public void makeFrame2(int x) {
          this.dispose();
          new Frame2(x);
        }
    
        public static void setOptions(JFrame f) {
          f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          f.setSize(250, 250);
          f.setEnabled(true);
          f.setVisible(true);
        }
    
        public static void main(String[] args) {
          new Frame1();
        }
    }
    
    package test;
    
    import javax.swing.JFrame;
    
    public class Frame3 extends JFrame {
      Frame2 link;
      SomeClass sc;
    
      public Frame3(Frame2 link)  {
        JFrame.setDefaultLookAndFeelDecorated(true);
        Frame1.setOptions(this);
        this.link = link;
        sc = new SomeClass(25);
      }
    }
    
    package test;
    
    import javax.swing.JFrame;
    
    public class SomeClass {
      int x;
    
      public SomeClass(int x) {
        JFrame.setDefaultLookAndFeelDecorated(true);
        this.x = x;
      }
    }
    
    package test;
    
    import javax.swing.JFrame;
    
    public class Frame2 extends JFrame {
      public Frame2(int x) {
        JFrame.setDefaultLookAndFeelDecorated(true);
        Frame1.setOptions(this);
        new Frame3(this);
      }
    }
    

1 个答案:

答案 0 :(得分:0)

根据oracle java文档,setDefaultLookAndFeelDecorated更改了所有新创建的JFrame的参数,所有现有的JFrame都保持不变。

JFrame Documentation