从外部 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();
我创建了一个应用程序,它将事件附加到 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();