2012-01-20 3 views
0

Я создаю программу, в которой пользователь может рисовать линии и стирать их. Я могу создать свое окно и создать функционирующий JMenuBar. Когда возможности рисования не включены, все в порядке. Но когда функция рисования включена, второй JMenuBar окрашен ниже оригинала. Эта строка меню не работает, и иногда, когда она нарисована, ВСЕ графики на экране также перекрашены ниже. Повторная калибровка окна каким-либо образом устраняет эту проблему.Метод repaint() вызывает появление второго, нефункционального JMenuBar?

Я бы разместил фотографии, но, вы знаете, я новый пользователь и не могу.

Я смог сузить проблему до точки в методе paint(). Необходимо знать: при перетаскивании мыши вызывается метод repaint(). Он использует мой метод paint(), который вызывает метод paintObject (Graphics g) в моем классе Line. Ошибка JMenuBar появляется в END метода краски в верхнем классе.

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, который не появляется, пока он не будет подсвечен. Спасибо, по крайней мере, за это!

+2

Вам нужно рассказать больше, намного больше. Для всех, кого мы знаем, вы можете делать что-то ужасно неправильное, например, рисовать прямо в окне верхнего уровня, таком как JFrame или JApplet. Я предполагаю, что вы не делаете этого, чтобы правильно рисовать JPanel или JComponent, и если это так, рисовать метод paintComponent не рисовать. Также вы захотите опубликовать [SSCCE] (http://sscce.org), чтобы лучше проверить ваш код. –

+0

, пожалуйста, напишите скриншот –

+0

также заметили, вы должны позвонить super.paint (g) –

ответ

2

Редактировать: Я пойду на конечность, я готов поспорить, что вы на самом деле рисуете прямо в окне верхнего уровня (JFrame или JApplet или JDialog ...) и добавили слушателя мыши к этому окну - следовательно, чертеж компонентов переводится немного.

Решение состоит в том, чтобы сначала изучить учебники, прежде чем пытаться сделать что-то довольно сложное. Они расскажут вам, как правильно рисовать, включая предложения, которые я дал в своих комментариях, например, рисование в методе JComponent или JPanel paintComponent и вызов метода super.paintComponent (g) в качестве первого вызова метода вашего переопределения paintComponent.

+2

Эй, посмотри на это! метод paintComponent() устранил проблему (мое использование метода paint() было просто путаницей со всеми API-интерфейсами, которые я читал. Я не смог распознать его как раз в учебнике)! Благодаря! Чтобы уточнить, я рисовал на JPanel. Это также устранило проблему с отсутствием текстового поля. Еще раз спасибо! – ctrlawkdel

+1

@ user1161539: Рад, что у вас это работает, но это странно, поскольку я не знаю, как JMenuBar можно было поймать в методе рисования JPanel. Вы добавили JMenuBar в JFrame с помощью метода 'setJMenuBar (...)'? Или он был добавлен в JPanel? –

+0

UPDATE: Я тестировал незафиксированную версию на другом компьютере (тот же ОС, тот же самый компилятор), и проблемы там не было. – ctrlawkdel

Смежные вопросы