java – 使用GUI的内部类的标准?

前端之家收集整理的这篇文章主要介绍了java – 使用GUI的内部类的标准?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我想知道内部类的标准实践(在Java中,但我认为它适用于所有OO语言).
所以我有一个JFrame子类ControllerWindow,它包含一个我绘制的JPanel子类MapPanel(因此它需要覆盖paintComponent方法),并且需要实现一个鼠标监听器.我当前的解决方案是将MapPanel放在一个单独的类中实现MouseListener,但是当我向那个管理我的课程的人展示它时,他似乎认为(我们有一点语言障碍)这应该在一个内在ControllerWindow中的类或者至少MouseListener应该是一个内部类.

所以我的问题是这里的标准解决方案是什么,将MouseListener放在内部类中,将JPanel放在不同的内部类中,还是放在它的单独类中? JPanel在一个内部类中实现MouseListener?为什么?

对我来说最重要的是它有效,但我想知道并理解这些事情背后的标准做法,如果可能的话.

编辑:下面的当前代码的非常简化版本.

class ControllerWindow extends JFrame{
    ...
    MapPanel drawPanel = new MapPanel();
    ...
}

和一个单独的类:

class MapPanel extends JPanel implements MouseListener{

    ...

    public void paintComponent(Graphics g){
        ...//fillRects etc.
    }

    //MouseListener methods
    public void mouseReleased(MouseEvent e){
        requestFocus();
        ...
        repaint()
        ...
    }
    public void mousePressed(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mouseClicked(MouseEvent e){}
}

也可能是这种情况,将两个类放在同一个文件中是可以接受的吗?我没有设想将MapPanel用于ControllerWindow以外的任何其他内容.

最佳答案
我认为你如何处理这个问题(正如Tom Hawtin评论的那样,GUI标准=泥浆),因为你在单个类中复杂了类的数量与复杂性.如果您只想为演示生成代码,则单个文件可能最简单.如果您想要将生产中的代码投入生产并随着时间的推移进行修改/维护,那么抽象出不同的类几乎肯定是您想要的方式.

例如,如果您将MapPanel嵌入到ControllerWindow中作为内部类,然后又想要用不同类型的MapPanel替换它,那么您需要对ControllerWindow进行大量更新,而不是仅仅针对不同的组件类型交换MapPanel.

使用MouseListener,我倾向于将它包含在MapPanel中,如果它专门处理该组件的事件(也就是说,如果只有MapPanel“知道”点击的含义,它应该是处理该点击的那个).我肯定不会把它放在ControllerWindow中,因为那时你从MapPanel“泄漏”了实现细节. (我能想到的唯一情况是:除了你的MapPanel之外,你还有多种面板类型,它们都需要以相同的方式响应点击,所以不要在每个面板中实现,你可以让ControllerWindow这样做.但即使这样,我不确定代码应该在ControllerWindow中.

MapPanel的鼠标侦听器是否是MouseListener的内部类实现,或者MapPanel是否实现它(如上面的代码中所示)可能归结为您喜欢哪种样式的问题.

猜你在找的Java相关文章