对于相当大的项目,我被告知在扩展JPanels的类时,最好实现使用嵌套类来实现监听器。例如,我可以有一个扩展JPanel的FactoryScreen类,并有一个嵌套的FactoryScreenBrain类来实现所有必要的监听器。
我从来没有得到过关于在此方式下封装我的类的具体好处或缺点的好的解释,直到现在一直只是用同时扩展JPanel并实现监听器的类。有人能给我提供一些指导吗?
对于相当大的项目,我被告知在扩展JPanels的类时,最好实现使用嵌套类来实现监听器。例如,我可以有一个扩展JPanel的FactoryScreen类,并有一个嵌套的FactoryScreenBrain类来实现所有必要的监听器。
我从来没有得到过关于在此方式下封装我的类的具体好处或缺点的好的解释,直到现在一直只是用同时扩展JPanel并实现监听器的类。有人能给我提供一些指导吗?
在监听器中使用内部类,可以使所有监听器的目的非常清晰。有时,这还可以避免许多if检查,但会增加一些代码量。
如果您有一个面板
public class MyPanel extends JPanel implements ActionListener
...
button1.addActionListener(this);
button2.addActionListener(this);
checkbox1.addActionListener(this);
timer3.addActionListener(this);
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == button1)
else...
... //potentially many elses
}
因为actionPerformed方法同时处理了许多不同的事件,所以很难准确地看到发生了什么。拥有一个面板:
可以帮助您更好地组织代码并使其更易于阅读和理解。public class MyPanel extends JPanel
...
button1.addActionListener(new ButtonListener());
button2.addActionListener(new ButtonListener());
checkbox1.addActionListener(new CheckBoxListener());
timer3.addActionListener(new TimerListener());
private class TimerListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
//do stuff related only to timers
}
}
JPanel
(或JFrame
或Thread
)并不是最佳实践。但是,GUI编程和良好的实践往往不会相遇。 - Tom Hawtin - tackline