2012-04-14 4 views
1

Я пытаюсь создать PaintBrush с Swings. Я хотел сделать бесплатную рисование на одной из JPanels, поэтому я переопределил ее PaintComponent и сделал кое-что, это прекрасно. Но я не получаю никакого фона, мне нужен белый фон, поэтому я назвал super.paintComponent (g) внутри paintComponent(), теперь я могу получить фон, но каждый раз, когда мой repaint() вызывается на событии mouseDragged, i потерять мой предыдущий рисунок на JPanel. Есть ли способ, которым я могу получить цвет фона, а также мой предыдущий рисунок не потерян?Предыдущий рисунок потерян после того, как super.paintComponent (g) вызван в JPanel

Любая помощь будет было оценено

JPanel paintComponent()

public void paintComponent(Graphics g) { 
     // super.paintComponent(g); 
     g.setColor(Color.red); 
     g.fillOval(xpos, ypos, 5, 5); 

    } 

mouseDragged()

public void mouseDragged(MouseEvent arg0) { 
     xpos= arg0.getX(); 
     ypos= arg0.getY(); 
     repaint(); 
      } 
+0

@HovercraftFullOfEels эй, я добавил код, все рисование делается только в paintComponent. – Nikhar

ответ

2

Это часто происходит, если один рисует с объектом Graphics полученных путем вызова getGraphics() на компонент с полученный таким образом графический объект не является долговечным. Весь чертеж должен быть выполнен из paintComponent или метода, называемого paintComponent.

Редактировать
ОК, спасибо, что разместили код. Поэтому я вижу, что вы рисуете только один овал в своем коде, поэтому неудивительно, что супер не позволит вам рисовать линию.

Возможные решения:

  • В вашем методе mouseDragged(...), добавлять точки к List<Point> и в методе paintComponent(...), перебирать этот список рисования вашей линии (установка обводки Graphics2D изменить толщину линии)
  • или Нарисуйте BufferedImage и покажите BufferedImage в вашем методе paintComponent (...).

Например, пожалуйста, посмотрите на мой StackOverflow ответ на этот вопрос: Changing JPanel Graphics g color drawing line

+0

Я не использовал getGraphic() где угодно. моя mouseDragged() дает мне новые координаты, я просто переписываю их. – Nikhar

+0

@ Нихар: см. Править для ответа. Также, пожалуйста, посмотрите мой код в ссылке, которую я привел, чтобы увидеть пример моего второго предложения. –

+0

Спасибо, человек, но может у плз сказать мне, почему, когда я рисовал овалы, он не рисовался с помощью super.PaintComponent (g)? – Nikhar