2016-07-02 8 views
0

in Java ich versuche, eine Klasse für die Anzeige in einem JFrame zwei JPanel Komponenten zu erstellen und einen Mouselistener bei einer davon hinzuzufügen. Ich erstelle eine Haupt-JPanel und verschachtelte darin eine private Klasse mit dem Namen drawRec (JPanel-Typ) zum Zeichnen eines Rechtecks, wer die Mausereignisse über ihn handhaben sollte, aber wenn ich einen Klick mache, passiert nichts. hier ist mein Code:Java geschachtelte Klasse reagieren nicht auf MouseListener Ereignisse

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) {} 

    } 
} 

Vielen Dank im Voraus

Antwort

3

Ihr Rahmen keine drawRec Platte enthält. Es enthält ein Exercise2 Panel, das drawRec.draw() aufruft, um seinen Inhalt zu malen. Wenn Sie auf klicken, klicken Sie auf eine Exercise2 Anzeige, die keinen Maus-Listener hat.

Vielleicht sollten Sie diese beiden Klassen zusammenführen. Zumindest müssen Sie den Maus-Listener zu einer Komponente hinzufügen, die dem Rahmen tatsächlich hinzugefügt wird.

könnte Die kürzeste fix sein:

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

In diesem Fall sind Sie noch nicht drawRec als Panel verwenden (weil man es zu nichts hinzufügen), aber man kann es als Maus-Listener verwendet für Ihr Exercise2 Panel.