类的全局字段

时间:2012-02-21 14:19:50

标签: java swing design-patterns derived-class

我遇到的一个非常常见的问题是,我有一些字段,我想通过从字段类初始化的派生类来引用它们。 让我更具体一点。

Class Diagram

我有三个派生自主类的类。 每个类都有一个与字段交互的方法。在这种情况下,a有一个调用类(JPanel)的JFrame并将其添加到内容窗格中。

我找到的方法是将Frame类创建的对象的引用传递给Panel类的构造函数。并通过它来引用它们。

有更有效的方法吗?如何为所有派生类创建全局字段或方法在这种情况下,它们是主类的组件?

更新

像这样。

import javax.swing.JFrame;
import javax.swing.JPanel;

public class JFrame1 extends JFrame {

    protected String field1;
    protected String field2;

    public JFrame1() {
        add(new Panel1());
    } 
}

class Panel1 extends JPanel {

    public Panel1() {

         //   field1 = "String"; Wrong
        }
    }

我知道我可以在class Panel1内嵌套public class Frame1,问题就会解决,但如果我希望这两个类在不同的文件中会怎样?

2 个答案:

答案 0 :(得分:2)

源自主类的三个类 - 这是什么意思?你的三个类派生自(扩展)一个JPanel,它没有任何字段。

如果你问三个类应该如何访问Frame1中可能是其容器的字段 - 那么你应该使用getParent()来引用父类,检查它是否是{ {1}}如果是,请访问其字段。

答案 1 :(得分:0)

好的,我找到了一条路。

Frame类

import javax.swing.JFrame;

public class JFrame1 extends JFrame {

    private String field1;

    public JFrame1() {
        add(new PanelA());
    } 

class PanelA extends Panel1 {

  @Override
  public String getField1() {
       return field1
  }
}

创建界面

public interface Connector {
    public String getField1();
}

Panel1类

import javax.swing.JPanel;

public abstract class Panel1 extends JPanel implements Connector {

    field1 = getField1();
}