2013-11-16 3 views
2
private void draw_shape() {           
    Graphics g = getGraphics(); 
    g.drawLine(0, 0, 100, 100); 
    repaint(); 
}           

В методе краски притягиваются только те графики, которая является частью методы краски из-за которого я хотел рисовать фигуры за пределами методы краски. Этот код рисует линию, но сразу исчезает, я не понимаю, почему это происходит. пожалуйста, помогитерисовать графики за пределами методы краски

+0

Проблема, более вероятно, будет в GetGraphics или перекрасить, и вы не можете быть вне краски ... –

+0

BTW - это за помощью Свинг или AWT компоненты ? –

ответ

0

Потому что метод paint также красит материал. Вы не должны рисовать графику вне метода рисования. Вы должны вместо этого переопределить метод рисования, например:

@Override public void paint (Graphics g) { 
    super.paint(g); 
    g.drawLine(0, 0, 100, 100); 
} 
1

линия исчезает, потому что свинг (или AWT) будет вызывать краску (графика) или paintComponent (графика г), чтобы боль компонент.

Что вам нужно сделать, это поместить свою логику рисования на рисование (Graphics) или paintComponent (Graphics g). Последнее более целесообразно.

Если вам действительно нужно рисовать вещи с помощью другого метода, сохраните изображение как поле класса и нарисуйте это изображение на методах paint или paintComponent.

2

Это не работает, потому что вы получаете ток Graphics за пределами Swing repaint thread. В основном:

  • вы получите текущий Graphics
  • вы рисуете что-то на нем
  • тогда вы звоните repaint(), что будет вызывать paint() компонента, таким образом, отбрасывая все, что вы сделали

Чтобы сделать это работы вы должны переопределить paint (paintComponent для Swing) метод вашего объекта:

@Override 
public void paint(Graphics g) { 
    super.paint(g); // if you have children to the component 
    g.drawLine(..) 
} 

, а затем просто позвонить repaint(), когда что-то было изменено.

0

Спасибо за помощь нашли ответ

BufferedImage image = (BufferedImage) createImage(300, 300); 
image.getGraphics().drawLine(0, 0, 300, 300); 
jLabel1.setIcon(new ImageIcon(image)); 
Смежные вопросы