【发布时间】:2013-04-12 00:04:08
【问题描述】:
我有一个带有内部类的主类。这是一个swing/GUI应用程序。
我有一些与 swing 相关的内部类,例如扩展 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); ...来自匿名课程和关于不同实现策略/设计模式的建议。
【问题讨论】:
-
就个人而言,我不喜欢这样做。我主要担心的是,如果有人扩展了您的课程并想要更改对话框的工作方式,会发生什么?从技术上讲,那里卡住了。来自主类的吸气剂将允许开发人员有机会改变这种行为,而无需尝试弄清楚如何改变你的内部类......是的,我不得不大摇大摆地复制代码只是这个问题 - MHO
-
关于模块化的好处。
标签: java swing actionlistener anonymous