2013-11-22 2 views
0

저는 Java GUI를 처음 접했고 단추를 클릭 할 때이 프로그램이 사각형을 표시하도록하려고합니다. repaint()가 paintComponent (Graphics g)에서는 동작하지 않기 때문에 아무 일도 일어나지 않습니다. 내가 검색 한 일부는 이벤트 발송 쓰레드를 사용한다고하지만, 난 여전히 JFrame의가의 paintComponent() 메소드가없는paintComponent를 호출하는 적절한 방법은 무엇입니까?

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
import java.util.*; 
public class Ham extends JFrame implements ActionListener 
{ 
    JPanel p1; 
    JButton b1; 
    public Ham(){ 
     setSize(600, 400); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     p1 = new JPanel(); 
     b1 = new JButton("Check"); 
     b1.addActionListener(this); 
     p1.add(b1); 
     add(p1, BorderLayout.NORTH); 
     setVisible(true); 
    } 

    public void actionPerformed (ActionEvent e){ 
     if(e.getSource() == b1){ 
      repaint(); 
     } 
    } 
    public void paintComponent(Graphics g){ 
     g.setColor(Color.BLUE); 
     g.fillRect(100,100,50,50);   
    } 
} 
+0

이 질문에 답변하는 데 시간을내어 후회합니다. 나는 당신이 포럼에서 10 가지 질문을 한 적이 있는데 한 번만 질문에 대한 대답을 받아 들일 필요가 없다는 것을 알아 챘습니다. 우리가 당신에게주는 도움에 감사하지 않을 것입니다. – camickr

+0

죄송합니다. ** ** 당신이 그걸 할 수 있다는 것을 알았습니다. – TheEyesHaveIt

+0

도와 주셔서 감사합니다. – TheEyesHaveIt

답변

6

매우 혼란 스러워요.

JPanel (또는 JComponent)의 paintComponent() 메서드를 재정 의하여 사용자 지정 그리기가 수행됩니다. 합리적인 값을 반환하려면 패널의 getPreferredSize() 메서드를 재정의해야합니다. 그런 다음 프레임에 패널을 추가합니다.

그런 다음 패널에서 repaint()을 호출하면 paintComponent() 메서드가 호출됩니다.

자세한 내용과 예제는 Custom Painting의 스윙 튜토리얼 섹션을 참조하십시오.

관련 문제