2013-07-13 3 views
2

클래스를 사용하여 JPanel을 확장 한 다음 프레임에 추가하고 버튼을 추가하는 간단한 GUI 응용 프로그램을 구현하려고했지만 버튼을 클릭해도 아무 일도 일어나지 않습니다. 무엇이 잘못 되었습니까?다음 코드로 잘못된 출력

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

class dup extends JPanel { 

    public void paintComponent(Graphics g) { 

     Graphics2D g2d = (Graphics2D) g; 

     g2d.setColor(Color.green); 

     g2d.fillRect(0, 0, this.WIDTH, this.HEIGHT); 
     System.out.println("inside paint component class"); 
    } 
} 

public class drawing implements ActionListener { 
    JFrame frame; 
    dup d1; 

    public static void main(String args[]) { 
     drawing d2 = new drawing(); 
     d2.go(); 
    } 

    public void go() { 
     frame = new JFrame(); 
     JButton button = new JButton("click me"); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     d1 = new dup(); 
     button.addActionListener(this); 

     frame.getContentPane().add(BorderLayout.WEST, button); 
     frame.getContentPane().add(BorderLayout.CENTER, d1); 
     frame.setSize(300, 300); 
     frame.setVisible(true); 

    } 

    public void actionPerformed(ActionEvent ae) { 
     frame.repaint(); 

    } 
} 

무엇이 문제입니까?

+0

"내부 페인트 구성 요소"라는 디버그 메시지가 보입니까? – Tarik

+0

클래스에 대한 일반적인 [Java 명명 규칙 (Java 命名 規則)] (http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307) (특히 이름에 사용 된 사례) 메소드 이름과 속성 이름을 일관되게 사용하십시오. 하지만 +1 SSCCE 게시. :) –

+0

또한'actionPerformed()'메소드에서'dup (JPanel)'의 값을 수정하려고 시도한다면'duprepane()'메소드를 사용해야 할 것입니다. 'frame.repaint()가 아닌' –

답변

1

너비와 높이가 잘못되었습니다. 당신은 ImageObserver 클래스 대신 구성 요소의 폭과 높이의 호텔이 상수를 사용하고

g2d.fillRect(0, 0, this.getWidth(), this.getHeight()); 

이 있어야한다.