0

だから私は3つのJFrameを持っています。JFrame 1 (別名 opts) は、いくつかの変数を入力するためのものです。OK で、JFrame 2 (別名ビュー、グラフィカル表示フレーム) を作成します。コンストラクターでは、JFrame 3 (別名マネージャー、グラフィカル ビューを循環するため) が即座に作成されます。JFrame.setDefaultLookAndFeelDecorated(true)(以降、"it" と呼びます) で装飾された Windows のようなものにしたいと考えています。

いくつかの異なるケース:

  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新しく作成されたすべての JFrame のパラメータが変更され、既存のすべての JFrame は変更されません。

JFrame ドキュメント

于 2012-08-30T10:21:01.090 に答える