【问题标题】:Global fields for classes类的全局字段
【发布时间】:2012-03-11 20:33:27
【问题描述】:

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

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

我找到的方法是将 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 中,问题就解决了,但是如果我希望这两个类在不同的文件中

【问题讨论】:

  • 你所说的派生是什么意思?
  • @Qwe 我的意思是创建/初始化/调用我不知道我必须使用的确切词。
  • 很容易写,作为回答您的问题,请使用SSCCE 编辑您的问题,否则有些网页您可以根据图片发送订单以支付款项

标签: java swing design-patterns derived-class


【解决方案1】:

好吧,我找到了办法。

框架类

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();
}

【讨论】:

    【解决方案2】:

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

    如果您询问您的三个类应该如何访问可能是它们的容器的 Frame1 中的字段 - 那么您应该使用 getParent() 来获取对父类的引用,检查它是否是 Frame1 以及是否是 - 访问其字段。

    【讨论】:

    • 你写的是how my three classes access the fields from Frame1。我使用getParent(),但无法将 JPanel 转换为 Frame1 类。
    • 同意你的拍摄到黑暗 +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2010-09-10
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多