Метод repaint() вызывает появление второго нефункционального JMenuBar?
Я создаю программу, в которой пользователь может рисовать линии и стирать их. Я могу создать свое окно и создать работающий JMenuBar. Когда возможность рисования не включена, все в порядке. Но когда включена возможность рисования, второй JMenuBar будет нарисован ниже оригинала. Эта строка меню не работает, и иногда при ее рисовании ВСЕ графические элементы на экране также перерисовываются ниже. Изменение размера окна любым способом решает эту проблему.
Я бы выложил картинки, но вы знаете, я новый пользователь и не могу.
Я смог сузить проблему до точки в моем методе paint(). Необходимо знать: когда мышь перетаскивают, вызывается метод repaint(). Он использует мой метод paint(), который вызывает метод paintObject(Graphics g) в моем классе Line. Ошибка JMenuBar появляется в конце метода рисования в верхнем классе.
public void paint(Graphics g)//paint() in the top class
{
for(int i = 0; i < objs.size(); i++)//Loop that finds all Tool(Line) objects that
((Tools)objs.get(i)).paintObject(g);//have been drawn, and redraws them.
//This part of the code completes successfully with no error.
}//ERROR OCCURS HERE!!!!!!
Я понятия не имею, почему это происходит. Как примечание, на экране также есть JTextField, который не появляется, пока не будет выделен. Спасибо, что хотя бы прочли это далеко!
1 ответ
Изменить: я пойду на конечности, держу пари, что вы на самом деле рисуете прямо в окне верхнего уровня (JFrame или JApplet или JDialog...) и добавили слушателя мыши в это окно - следовательно, чертеж компонентов переведен немного вниз.
Решение состоит в том, чтобы сначала взглянуть на учебники, прежде чем пытаться сделать что-то довольно сложное. Они расскажут вам, как правильно рисовать, включая предложения, которые я дал в моих комментариях, такие как рисование в JComponent или JPanel's paintComponent
метод и вызов метода super.paintComponent(g) в качестве первого вызова метода переопределения paintComponent.