0

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

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

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

例如主类有内部类和内部类内部我有一个匿名侦听器类,例如:

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); ...来自匿名课程和关于不同实现策略/设计模式的建议。

4

2 回答 2

1

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

就个人而言,我认为听众是控制器的一部分。我更喜欢 Swing 组件是纯视图,并让控制器实例化它们并为它们提供所需的侦听器,以便按照控制器的选择进行操作。不要让视图不得不担心它如何与控制器通信或它所在的位置。

于 2013-04-12T00:08:20.047 回答
0
CTable.this.td.setVisible(true);

有一条规则叫做得墨忒耳法则。这表明您应该只直接访问类。通过跨多个对象来获得所需的方法,您正在创建类之间的紧密耦合,这使得将来更改单个类变得更加困难。

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

于 2013-04-12T00:08:47.363 回答