2016-07-02 2 views
0
Java에서

JFrame에 두 개의 JPanel 구성 요소로 표시 할 클래스를 만들고 그 중 하나에 Mouselistener를 추가하려고합니다. 메인 JPanel을 생성하고 그 위에 마우스 이벤트를 처리해야하는 직사각형을 그리는 데 사용되는 drawRec (JPanel 유형)라는 private 클래스를 중첩합니다.하지만 클릭 할 때 아무 일도 발생하지 않습니다. 사전Java 중첩 클래스가 MouseListener 이벤트에 반응하지 않음

에서

public class Exercise2 extends JPanel { 

    private drawRec square; 


    public static void main(String[] args) { 
    JFrame wind = new JFrame(); 
    Exercise2 content = new Exercise2(); 
    wind.setContentPane(content); 
    wind.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    wind.setLocation(100, 100); 
    wind.setSize(new Dimension(500,500)); 
    wind.setVisible(true); 

    } 

    Exercise2() { 
    setBackground(Color.BLACK); 
    square = new drawRec(); 
    } 

    public void paintComponent(Graphics g) { 

    super.paintComponent(g); 
    square.draw(g, 100, 90); 
    } 

    private class drawRec extends JPanel implements MouseListener { 


    drawRec() { 
     addMouseListener(this); 
    } 

    private void draw(Graphics g, int x, int y) { 

     g.setColor(Color.BLUE); 
     g.fillRect(x, y, 50, 20); 


    } 

    public void mouseClicked(MouseEvent e) {} 
    public void mouseEntered(MouseEvent e) {} 
    public void mouseExited(MouseEvent e) {} 

    public void mousePressed(MouseEvent e) { 
     System.out.println("Test"); 
    } 

    public void mouseReleased(MouseEvent e) {} 

    } 
} 

감사

답변

3

당신의 프레임이 drawRec 패널을 포함하지 않는 : 여기 내 코드입니다. 여기에는 내용물을 그리기 위해 drawRec.draw()을 호출하는 Exercise2 패널이 포함되어 있습니다. 클릭하면 마우스 수신기가없는 Exercise2 패널을 클릭합니다.

아마도이 두 클래스를 병합해야합니다. 최소한 프레임에 실제로 추가 된 구성 요소에 마우스 수신기를 추가해야합니다. (당신은 아무것도에 추가되지 않기 때문에) 당신은 여전히 ​​패널로 drawRec을 사용하지 않는 경우에

Exercise2() { 
    setBackground(Color.BLACK); 
    square = new drawRec(); 
    this.addMouseListener(square); // add this line 
} 

,하지만 당신을위한 마우스 리스너로 사용할 수 있습니다

가장 짧은 수정 될 수 귀하의 Exercise2 패널.

관련 문제