permanente aktualisierung der Koordinaten der Maus auf einem Panel

Cem

Mitglied
Hallo

Ich habe angefangen eine gui zu bauen die ein paar Buttons, Textfelder und natürlich auch ein Panel 🙂.

Dieses Panel soll später so zu sagen das Zeichenfeld von meinem Grahpenzeichner werden aber das ist sache von morgen 🙂

Ich habe für dieses Panel eine innere Klasse geschreiben die wie folgt aussieht

Code:
class DrawPanel extends JPanel implements MouseListener {


    public DrawPanel(int xPos, int yPos, int xSize, int ySize) {
        super();
        this.setBounds(xPos, yPos, ySize, ySize);
        this.setBackground(Color.black);
        this.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
        addMouseListener(this);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.WHITE);  

    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
       // System.out.println("Mouse pressed in: "+"X = "+ e.getX()+"   Y = "+ e.getY());
    }

    public void mouseReleased(MouseEvent e) {    
    }

    public void mouseEntered(MouseEvent e) {
       // System.out.println("Mouse entered in: "+"X = "+ e.getX()+"   Y = "+ e.getY());
    }

    public void mouseExited(MouseEvent e) {
    }
}

Ich habe es hinbekommen das er mir eine Consolenausgabe macht, die jedoch nur zb die Position im Panel angibt, an der gecklickt wurde oder an der die Maus in das Panel eingetreten ist.

Ich habe nun folgende Ziele:

1) Ich will es schaffen, das es mir alle 5-10 ms die Koordinaten aktualisiert und das ohne klicken zu müssen

2) das ich es mit Graphics, auf das panel Zeichnen lassen kann mit den Eigenschaften aus 1)


Ich hoffe ich habe mein problem gut geschildert sodas man mir auch gut helfen kann 🙂

lg Cem
 
Zuletzt bearbeitet:
Implementiere den
Code:
MouseMotionListener
. Da gibt's eine Methode, die genau für dich gemacht ist:
Code:
mouseMoved
🙂
 
haha danke 🙂

es hat mir geholfen so bin ich um aufwändige schleifenkunstrukionen gekommen 😉

aber wie verbinde ich mouseMoved mit Graphics ? sodas ich zB die ausgabe hier

Code:
 public void mouseMoved(MouseEvent e /*,Graphics g*/ ) {
        System.out.println("X = "+ e.getX()+"   Y = "+ e.getY());
       
 }

einfach auf das Panel zeichnen lassen kann ? geht das so wie mit dem /*,Graphics g*/ Angedeutet ? weil ich habs schon ausprobiert aber ich bekomm ne Exeption ;(

lg Cem
 
Zuersteinmal:

Speicher kein Graphics Objekt zwischen oder erstell ein eigenes, wenn du auf einem Panel zeichnen willst.

Zu deiner Lösung:

Speichere in einer Klassenvariable die x und y Koordinate zwischen, speicher dort die aktuellen Koordinaten zwischen, die du aus dem MouseMoved erhälst und in der paintComponent greifst du auf die zu.
 
danke für die antwort 🙂 das ich mir auch schon gedacht

Aber wenn ich das mache wie bekomme ichs hin das mir mouseMoved nicht immer nur einmal in X und Y was reinlegt und dann einfach aufhört damit weil so macht mit paintComponent auch nur einmal was aufs panel egal wie viele kreise ich mit der maus darin drehe ???:L
 
Zeig mal deine jetzigen Codezeilen, am besten nur MouseMoved und paintComponent.
Weil so ganz verstehe ich dein jetziges Problem nicht.
 
die methode mouseMoved aktualisiert einfach die klassenvariablen x und y nicht deshalt legt es den wert einmal fest und das wars ich will aber das das ständig aktualisiert wird

hier der code:

das ist die paintComponent methode

Code:
@Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.WHITE);
        g.drawString("x = "+String.valueOf(x), 1, 15);
        g.drawString("y = "+String.valueOf(y), 1, 26);
    }

und hier die mouseMoved methode

Code:
public void mouseMoved(MouseEvent e) {
        x = e.getX();
        y = e.getY();
    }

die Variablen x und y sind auf die innerklasse DrawPanel beschränkt

hoffe das hilft dir weiter 🙂 danke
 
die methode mouseMoved aktualisiert einfach die klassenvariablen x und y nicht deshalt legt es den wert einmal fest und das wars ich will aber das das ständig aktualisiert wird

naja, x und y werden doch ständig aktualisiert (es sei denn du hast nicht
Code:
 addMouseMotionListener(this);
aufgerufen) ..dein Problem ist doch aber viel mehr, dass du nicht
Code:
repaint()
; aufrufst ?
Java:
	@Override
	public void mouseMoved(MouseEvent e) {
		x = e.getX();
		y = e.getY();
		repaint();
	}

???
 
AHH!! ich freu mich soo danke XD an repaint() hab ich garnicht mehr gedacht 😀

hab mal wieder den wald vor lauter bäumen nicht gesehen 😀

vielen dank *freu* 😀
 

Zurück
Oben