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

Create an object instance of a subclass from an external class

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

class MenuItemEventHandler 附加到每个菜单项。当 MenuItemEventHandler class 是外部的时,这工作得很好。但是我需要在 GUI class 而不是外部获取它。

我遇到了无法从同一包中的另一个外部 class 引用事件处理程序 subclass 的问题。可以这样做吗?

下面是 guiclass 和 eventhandler subclass

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
      }
}

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

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

public class MenuItem {

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

// attach the event to the menu item

两个选项,任你选MenuItemEventHandler static:

所以你这样声明你的 class:

public static class MenuItemEventHandler ...

或者您使用对封闭 class GUIClass

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

某事:

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

就个人而言,我发现第二个选项通常是糟糕或不正确的设计的味道。我几乎从不使用这种结构。只是一个如何 "work around" 这种模式的例子(还有其他的,这取决于上下文):

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

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

...

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