2012-01-12 6 views
-1

Paint 메서드가 호출 될 때 코드를 실행할 때 Java의 Paint 메서드에 대해 질문하고 싶습니다.Java의 Paint 메서드

그럼 어떻게 페인트 방법을 중지 하시겠습니까?

참고 : 나는 페인트 방법을 수행하기 위해 버튼을 만들었습니다.

일반적으로 코드를 실행할 때 Paint 메서드가 기본적으로 호출됩니다. 그래서이를 멈추고 단추를 클릭 할 때 Paint 메서드를 호출해야합니다. 여기

코드

import javax.swing.JApplet; 
import java.awt.Graphics; 
import java.awt.Color; 
import javax.swing.JButton; 
import java.awt.FlowLayout; 
import java.awt.event.*; 
import java.util.Random; 

public class RandDraw extends JApplet implements ActionListener { 

JButton Draw1 = new JButton ("Draw"); 

public void init() { 
    this.setLayout (new FlowLayout()); 
    this.add(Draw1); 
    Draw1.addActionListener(this); 
} 

public void actionPerformed(ActionEvent e){ 
    if(e.getSource()==Draw1) 
    repaint(); 
    } 
} 

public void paint(Graphics g){ 
    for(int i=0;i<50;i++){ 
    g.setColor 
     (new Color(i*655%256,i*355%256,i*958%256)); 
    Random r = new Random(); 
    int rr= r.nextInt(40)+10; 
    Random r1 = new Random(); 
    int rr1= r1.nextInt(70)+10; 
    Random r2 = new Random(); 
    int rr2= r2.nextInt(10)+10; 
    g.fillOval(2*rr1,rr*rr2,O+O1*2,O+O1*2); 
    } 
} 
} 
+0

구체적으로 무엇을하려고하는지 더 자세히 알려줘야합니다. 스윙을 사용하고 있습니까? 일반적으로 페인트 메서드는 다시 그릴 이유가있을 때만 호출됩니다. 당신의 프로그램을 무한 루프 나 블록/동결시킬 수있는 코드를 페인트 메소드에 가지고 있습니까? – collinjsimpson

+0

버튼을 클릭하지 마십시오? 질문이 내게 명확하지 않다 ... –

+0

코드가 완료된 후에 코드가 멈춘다. – Max

답변

1
  1. 는 클래스에 boolean 멤버 변수 doDraw를 추가합니다. volatile.
  2. 버튼으로 ActionListener에서 doDraw의 값을 전환합니다. 그것이 사실이라면 거짓으로 만드십시오; 거짓이라면, 사실로 만드십시오.
  3. 마지막으로,

    경우 (doDraw) { 여기 코드 // 나머지}

paint() 방법의 몸을 둘러싸 그리고 거기 당신은 간다!

+0

대단히 고맙다고 생각합니다. – amjad971991

+0

그리고 모든'새로운 랜덤()'을 버리십시오. 하나의 난수 * 생성기 * (하나 이상의 숫자를 생성 할 수 있음)로 충분할 것입니다. 그것이 이전의 것을 다시 돌려주지 않을 것이기 때문에 메서드가'nextInt' btw라고하는 이유입니다. –

+0

+1 페인팅을 제어하기 위해 부울 속성을 추가하는 경우 +1. -1 (특히 최상위 컨테이너에서) paint() 메서드의 재정의를 권장합니다. 커스텀 페인팅은 JPanel (또는 JComponent)의 paintComponent() 메소드를 오버라이드 한 다음 패널을 애플릿에 추가해야한다. – camickr

1

일반적으로 paintComponent()를 재정의해야하며, 결국 paint()에 의해 호출됩니다. paintComponent()에서 멋진 것들을하십시오.

나머지 질문에 대해 잘 모르겠습니다. Ernest의 답변을 참조하십시오.

+0

+1 (override) : paintComponent(). – camickr

+0

@camickr +1을 보내 주셔서 감사합니다. – user949300

관련 문제