Странная графическая ошибка: копия компонента A нарисована на компоненте B. ПОМОЩЬ! (java)

Я сделал простую программу рисования, в которой вы можете использовать кисть, чтобы рисовать разные цвета и стирать (просто рисовать белым).

Он работает нормально, но у меня есть очень странная графическая ошибка, из-за которой панель инструментов и последний наведенный курсором цвет / значок инструмента отображаются поверх панели рисования.

Реализация: фрейм содержит два расширения JPanel: a ToolPanel и DrawPanel. ToolPanel содержит две панели JPanel, которые содержат кнопки цвета и инструментов. Кнопки являются расширениями JComponent.

ссылка на снимок экрана (по-видимому, мне не разрешено публиковать изображения):

enter image description here

примечание:Кнопки на второй «фальшивой» панели инструментов не являются настоящими кнопками, на которые можно нажимать, и я могу рисовать поверх них. Если я закрашу "фальшивую" цветную кнопку в левом углу, она будет перекрашена снова, когда я наведу курсор на новый цвет и войду в панель рисования с помощью мыши.

примечание 2: Раньше у меня был JMenuBar, который также был окрашен в выдвижная панель. Он перекрашивался каждый раз, когда панель рисования наводилась мышью после того, как окно (а не только панель) теряло фокус однажды.

Некоторый код: (Я знаю, что реализация выбора инструмента не самая лучшая: P)

Метод paintComponent DrawPanel:

    public void paintComponent(Graphics g) { 
    if(isMousePressed) {
        if(tool == "BRUSH") {
            g.setColor(color);
            g.fillOval(currentEvent.getX(), currentEvent.getY(), 30, 30);
        } else if(tool == "ERASER") {
            g.setColor(getBackground());
            g.fillOval(currentEvent.getX(), currentEvent.getY(), 30, 30);

        }
    }
}

Сообщите мне, есть ли какая-либо соответствующая информация или код, который я пропустил.

Гипотеза: Я не вызывал super.paintComponent в методе PaintComponent DrawPanels, может это вызывает проблемы? Причина, по которой я этого не сделал, заключается в том, что в этом случае фон будет постоянно перерисовываться, поэтому будет видна только точка, которую я нарисовал последней. Не уверен, действительно ли супервызов решает проблему или поддельная панель также просто закрывается фоном. Может мне нужно как-то обойти это? Или что-то еще?

Спасибо!

5
задан RRUZ 11 December 2011 в 23:55
поделиться