如何在2个不同的Swing窗口之间共享方法?

时间:2012-01-28 08:52:11

标签: java swing inheritance

我有一个Swing应用程序,其中我有多个具有不同目标的窗口,但它们都有两个共同点:

  • 他们使用与业务逻辑相关的特定对象
  • 他们必须使用特定对象的内容更新一些小部件

因此,为了避免代码冗余,我想分享一些例程 也许一个例子可以更清楚:

public class WindowA {
     private JLabel labelA;
     // ...
     private void updateLabelInACertainManner() {
          labelA.setText(this.specificObject.getText());
     }
}

public class WindowB {
     private JLabel labelB;
     // ...
     private void updateLabelInACertainManner() {
          labelA.setText(this.specificObject.getText());
     }
}

如何知道updateLabelInACertainManner()在两个类中引用相同的对象,我如何共享specificObject

我在考虑从包含该方法的WindowA继承WindowBWindowRoot,但如果labelAlabelB不是这样做的话相同的对象,不一定以相同的方式创建?

2 个答案:

答案 0 :(得分:2)

我认为您应该阅读此approach或关于此approach

答案 1 :(得分:1)

您可以将其文本作为参数更改的标签传递给超类中的方法:

public class SuperWindow {
    protected void updateLabel(JLabel label) {
       label.setText("foo");
    }
}

public class WindowA extends SuperWindow {
    private JLabel labelA;
    //...

    private void somethingHappened() {
      updateLabel(labelA);
    }
}

或者您可以为特定子类中的标签编写一个getter:

public class SuperWindow {
   protected abstract JLabel getLabel();

   protected void updateLabel() {
     getLabel().setText("foo");
   }
}

public class WindowA extends SuperWindow {
   private JLabel labelA;
   //...

   @Override
   protected JLabel getLabel() {
      return labelA;
   }

   private void somethingHappened() {
      updateLabel();
   }
}

同样适用于specificObject