Я сделал простую программу рисования, в которой вы можете использовать кисть-инструмент для рисования разных цветов и стирания (просто рисуйте белым).
Работает нормально, но у меня очень странная графикаошибка, из-за которой панель инструментов и последний окрашенный мышью цвет / значок инструмента были нарисованы поверх панели.
Реализация: фрейм содержит два расширения JPanel: панель инструментов и панель рисования.Панель инструментов содержит два JPanel, которые содержат кнопки цвета и инструментов.Кнопки являются расширениями JComponent.
ссылка на скриншот (я не могу публиковать изображения по-видимому):
![enter image description here](https://i.stack.imgur.com/cdzui.png)
примечание: кнопки на втором«Поддельные» панели инструментов - это не настоящие кнопки, на которые можно нажимать, и я могу рисовать поверх них.Если я нарисую цветную кнопку «фальшивка» в левом углу, она будет перекрашена снова, когда я наведу курсор мыши на новый цвет и войду в тянущую панель с помощью мыши.
note 2: Раньше у меня был JMenuBar, который былтакже окрашены в тянущую панель.Она перекрашивалась каждый раз, когда на панель затвора накладывалась мышь после того, как окно (а не только панель) один раз теряло фокус1017 * Метод 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 в DrawPanels paintComponent-метод, может быть, это вызывает некоторые проблемы?Причина, по которой я этого не сделал, заключается в том, что если я это сделаю, он будет постоянно перекрашивать фон, поэтому будет видна только точка, которую я нарисовал последней.Не уверен, что суперзвук действительно решит проблему, или же поддельная панель просто покрыта фоном.Может быть, мне нужно обойти это как-то иначе?Или что-то еще?
Спасибо!