Мне интересно о стандартной практике с внутренними классами (на Java, но я полагаю, что это относится ко всем языкам OO). Итак, у меня есть подкласс JFrame ControllerWindow
, который содержит подкласс JPanel MapPanel
, на который я рисую (так что ему нужно перезаписать метод paintComponent) и который должен реализовать прослушиватель мыши. Мое текущее решение, которое работает, состоит в том, чтобы иметь MapPanel
в отдельном классе, реализующем MouseListener, но когда я показал это парню, который руководит моим курсом, на днях он, казалось, думал (у нас немного языковой барьер), это должно быть во внутреннем класс в ControllerWindow
или, по крайней мере, MouseListener должен быть внутренним классом.Стандарты для использования внутренних классов для GUI?
Итак, мой вопрос заключается в том, что было бы стандартным решением здесь, поставить MouseListener во внутренний класс, JPanel в другом внутреннем классе или все еще в его отдельном классе? JPanel реализует MouseListener в одном внутреннем классе? И почему?
Самое важное для меня - это то, что он работает, но я хотел бы узнать и понять стандартные практики, стоящие за этими вещами, если это возможно.
EDIT: очень упрощенная версия текущего кода ниже.
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
.
Стандартная практика для GUI-кода - это один большой шар грязи. –
Не могли бы вы предоставить код? При необходимости упрощается. – amorfis