JPanel und MouseListener

Lapskaus

Grünschnabel
Abend,
ich sitze gerade an einer Hausarbeit die wie folgt aussieht :
Man soll ein neues Fenster erstellen, in dem sich 2 Ovale nebeneinander im Oberen Teil und ein Rechteck im unteren Teil befinden.
Desweiteren sollen sich die Ovale bei bestimmten Mausaktionen verfärben.
Z.B.:
Linkes Oval färbt sich grün, wenn innerhalb des Rechtecks ein Linksklick stattfindet
Linkes Oval färbt sich rot, wenn ausserhalb des Rechtecks ein Linksklick stattfindet
Analog färbt sich das Rechte Ovale bei einem Rechtklick

Im Anhang sieht man wie das Fenster aussehen soll.

Mein Problem besteht jetzt darin die Mausklicks, "RollOvers" etc. abzufragen. Vielleicht weiss jemand von euch weiter.

Hier der Quellcode:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
/**
 *
 * @author amh
 */
public class MausEreigniss extends javax.swing.JFrame{
    
    static Diagramm dia;
    
    /** Creates a new instance of Main */
    public MausEreigniss() {
        super();
        setBounds(100,100, 500, 400);
        setTitle("Mausereigniss");
        dia = new Diagramm(0, 0, 500, 400);
        setContentPane(dia);
        setVisible(true);
        dia.setBackground(Color.LIGHT_GRAY);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        MausEreigniss me = new MausEreigniss();
    }
}

class Diagramm extends JPanel implements MouseListener{
    private int x, y, w, h;
    
    Diagramm (int x, int y, int w, int h){
        super();
        addMouseListener(this);
    }

    public void mouseEntered(MouseEvent event) {

    }

    public void mouseExited(MouseEvent event) {

    }

    public void mousePressed(MouseEvent event) {
      
    }

    public void mouseReleased(MouseEvent event) {
        
    }

    public void mouseClicked(MouseEvent event) {
        
    }
    
    public void paintComponent(Graphics g) {
        Rectangle2D rect = new Rectangle2D.Double(0, 0, 80,20);
        Graphics2D g2 = (Graphics2D)g;
        super.paintComponent(g2);
        Dimension d = getSize(null);
        MausEreigniss.rect.repaint();
        // Skalieren auf 100x100
        g2.scale(d.getWidth()/100.0, -d.getHeight()/100.0);
        // Verschiebe Ursprung
        g2.translate(10,-90);
        //Rechteck
        g2.setPaint(Color.WHITE);
        g2.fillOval(0,45, 35,35);
        g2.fillOval(45,45, 35,35);
        g2.fill(rect);
        g2.setPaint(Color.BLACK);
        g2.drawOval(0,45, 35,35);
        g2.drawOval(45,45, 35,35);
        g2.draw(rect);   
        
   }
    
}

MfG
Lapskaus
 

Anhänge

  • 26785attachment.jpg
    26785attachment.jpg
    35,1 KB · Aufrufe: 146
Dein Rechteck muss zusätzlich ein eigenes Panel sein, auf welchem du dann die MouseEvents zum grünfärben abfangen kannst. Wann die Events auftreten ist im Javadoc ausreichend beschrieben. Auf den Events kannst du mit getButton abrufen welche Maustaste betätigte wurde.

Den Rest überlasse ich dir mal weiterhin als Aufgabe, sollst ja was lernen dabei.
 
Danke für die flotte Antwort.
Ich habe schon versucht das Rechteck selbst als Jpanel zu erzeugen und per
add dem ContentPane hinzuzufügen, allerdings hat er dabei weder die Positionierung noch die Grösseneinstellungen des "RechteckPanels" übernommen.
Das hinzugefügte JPanel wurde immer als kleines Quadrat am oberen Rand in der mitte dargestellt.

Vielleicht weisst du ja dafür auch noch einen Rat.
 
Morgen,
Ich habs dann schliesslich doch noch hinbekommen, ich hab die jetzt eine Abfrage hinzugefügt welche die Position des Klicks mit den Koordinaten des Rechtecks vergleicht und die es mir damit erlaubt ensprechend auf einen Klick innerhalb oder ausserhalb des Rechtecks zu reagieren.

Danke trotzdem für die Hilfe
MfG
Lapskaus
 
Zurück