提问者:小点点

使用侦听器实现内部类的更好方法


我有一个带有内部类的主类。这是一个摇摆/GUI应用程序。

我有与摇摆相关的内部类,例如扩展JPanel、JDialog等…

在内部类中,我有匿名类,例如操作侦听器,我必须设置并从外部类获取数据。

例如main类有内部类,而在内部类中,我有一个匿名侦听器类,如下所示:

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(测试);CTable.this.td. setViable(真);…


共2个答案

匿名用户

我知道匿名内部类一直是Swing的习惯用法,但我从来不喜欢它们。

我个人认为监听器是控制器的一部分。我更喜欢Swing组件是纯粹的视图,让控制器实例化它们,并给它们需要的监听器,以充当控制器选择的角色。不要让视图不得不担心它如何与控制器通信或者它生活在哪里。

匿名用户

CTable.this.td.setVisible(true);

有一个叫做demeter定律的规则。这表明你应该只直接访问类。通过跨过几个对象来获取所需的方法,你在类之间创建了紧密的耦合,这使得将来更难更改单个类。

我为此建议的设计模式可能是Proxy类。代理类充当两个类之间的缓冲区,意味着两个类都通过代理类相互通信