从外部类创建子类的对象实例

时间:2015-04-01 19:28:39

标签: java swing subclass

我已经创建了一个应用程序,它将事件附加到一个JButtons类和其他我在GUI类中多次实例化的swing组件。

类MenuItemEventHandler附加到每个菜单项。当MenuItemEventHandler类是外部时,这完全正常。但是我需要将它放在GUI类而不是外部。

我留下的问题是无法从同一个包中的另一个外部类引用事件处理程序子类。是否可以这样做?

下面是guiclass和eventhandler子类

public class GUIClass {

// gui behaviour

    public class MenuItemEventHandler extends AbstractAction {

      private String aVariable;

      private static final long serialVersionUID = 1L;

      @Override
      public void actionPerformed(ActionEvent arg0) {
          // update a JList with added item
      }
}

下面是我想引用事件处理程序的外部类,所以我可以将它附加到GUI对象的集合。

它引用了我无法实现的MenuItemEventHandler类。

public class MenuItem {

ResturantGUI.MenuItemEventHandler action = ResturantGUI.new MenuItemEventHandler(this.item);
newButton.setAction(action);

// attach the event to the menu item

1 个答案:

答案 0 :(得分:2)

有两个选项,您可以MenuItemEventHandler static

所以你像这样声明你的类:

public static class MenuItemEventHandler ...

或者使用对封闭类GUIClass

的实例的引用来创建事件处理程序

东西:

GUIClass guiClass = new GUIClass();
MenuItemEventHandler handler = guiClass.new MenuItemEventHandler();

就个人而言,我发现第二种选择通常是设计不良或不正确的气味。我几乎从不使用这种结构。只是一个例子,说明你如何能够解决问题"这种模式(还有其他模式,取决于上下文):

public class GUIClass {
     public class MenutItemEventHandler {
           ...
     }

     public MenuItemEventHandler createEventHandler() {
           return new MenuItemEventHandler();
     }
}

...

 GUIClass guiClass = new GUIClass();
 MenuItemEventHandler handler = guiClass.createEventHandler();