0

所以我有 3 个 JFrame。JFrame 1(又名 opts)用于输入一些变量。确定后,它会创建 JFrame 2(又名视图,图形查看框架)。在构造函数中,立即创建了 JFrame 3(又名管理器,用于在图形视图中循环)。我希望它们像 Windows 一样装饰JFrame.setDefaultLookAndFeelDecorated(true)(从现在起称为“它”)。

几种不同的情况:

  1. 当我根本不设置它时,所有的 JFrame 都是 Windows 装饰的。
  2. 当我将它放在“opts”或“manager”构造函数中,运行项目,然后单击 OK 按钮,所有的 JFrame 都像 Windows 一样装饰。
  3. 但是,当我把它放在“view”构造函数中时,只有“opts”和“view”是Windows修饰的,而“manager”是Java修饰的。
  4. 但是当我把它放在一个只从文件中读取一些数据并从中制作一些对象的类中时,只有“opts”是 Windows 修饰的。

它究竟是如何工作的?我想知道为什么它会发生。

编辑:我无法复制案例 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);
  }
}
4

1 回答 1

0

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

JFrame 文档

于 2012-08-30T10:21:01.090 回答