Java 使用侦听器实现内部类的更好方法
我有一个带有内部类的主类。这是一个swing/GUI应用程序 我有一些与swing相关的内部类,比如扩展JPanel、JDialog等等 在内部类中,我有匿名类,比如action listeners,我必须设置这些类并从外部类获取数据 例如,main类有一个内部类,而在内部类中我有一个匿名侦听器类,如下所示:Java 使用侦听器实现内部类的更好方法,java,swing,actionlistener,anonymous,Java,Swing,Actionlistener,Anonymous,我有一个带有内部类的主类。这是一个swing/GUI应用程序 我有一些与swing相关的内部类,比如扩展JPanel、JDialog等等 在内部类中,我有匿名类,比如action listeners,我必须设置这些类并从外部类获取数据 例如,main类有一个内部类,而在内部类中我有一个匿名侦听器类,如下所示: public class Main extends JApplet { //etc... private class CTable extends JPanel { CD
public class Main extends JApplet {
//etc...
private class CTable extends JPanel {
CDialog td;
private JPopupMenu menu;
public CTable(String title, AbstractTableModel tableModel) {
//etc...
menu = new JPopupMenu();
JMenuItem menuItem = new JMenuItem("Test");
menu.add(menuItem);
//etc...
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
CTable.this.td = new CDialog("Test");
CTable.this.td.setVisible(true);
}
});
}
}
我唯一的问题是,这样访问变量是否是一种好的做法:CTable.this.td=new-CDialog(“Test”);
CTable.this.td.setVisible(true)强>
…来自匿名类和关于不同实现策略/设计模式的建议。我知道匿名内部类永远都是Swing的习惯用法,但我从来都不喜欢它们 就我个人而言,我认为听众是控制器的一部分。我更喜欢Swing组件是纯视图的,让控制器实例化它们,并为它们提供所需的侦听器,以作为控制器选择的对象。不要让视图担心它与控制器的通信方式或它所在的位置
CTable.this.td.setVisible(true);
有一条规则叫做。这说明您应该只直接访问类。通过单步遍历多个对象以获得所需的方法,可以在类之间创建对象,这使得将来更改单个类变得更加困难
我建议的设计模式可以是
代理类
。代理类充当两个类之间的缓冲区,意味着两个类都通过相互通信,我个人不想这样做。我主要关心的是,如果有人扩展了您的类并希望更改对话框的工作方式,会发生什么情况?从技术上讲,这是一个问题。来自主类的getter将允许开发人员有机会更改此行为,而无需尝试并找出如何更改您的内部类…是的,我不得不为这个问题复制大量代码-关于模块化的MHOgood点。谢谢,我会接受您的MVC回答,但其他建议也很好。太糟糕了,stackoverflow不允许“接受”多个答案