Schlüsselworte mousePressed mouseReleased

hollowmaster

Mitglied
Hallo Leute,

also grob gesagt, ich hab ein Frame -> JPanel -> und darin ein Array mit JPanels (zb 3x3)
in den letzteren ArrayPanels hab ich ein mouselistener, der mir sagen soll in welchem Panel ich die Maus geklickt hab und in welchem Panel ich diese losgelassen habe.
Leider bekomme ich immer nur bei release die id vom Panel, dort wo ich press gedrückt hab...
Hier noch mein kleine Panelklasse:
Java:
package Aufgabe1;
import CircleField.*;

import java.awt.Color;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.event.MouseInputListener;
//Klasse Circle ---------------------------------------------------------------------
public class Circle extends JPanel implements MouseInputListener{
    //Variablen
    private boolean draw = false;
    private Color color = Color.MAGENTA;
    private int id;
    Point CursorS,CursorE;
    static int Merk=-1;
    int temp;
    private boolean Pressed;
    boolean rel = false;
    boolean Klick=false;
    boolean go1=false;
    boolean go2=false;
   //Methoden
    public boolean isPressed(){
        return this.Pressed;
    }
    public void setPress(boolean var){
        this.Pressed = var;
    }
    public void initReihe(boolean var){
        if (var){
            temp = SpielFeld.getReihenfolge(); //temp = aktuelle Reihenfolge
        }
    }  
    public boolean isDraw() {
        return draw;  
    }
    public void setDraw(boolean draw) {
        this.draw = draw;
        repaint();
    }
    public void setColor(Color color) {
        this.color = color;
        repaint();
    }
    //Konstruktor
    public Circle(int id) {
        this.id=id;
        this.addMouseListener(this);
        setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
        addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e) {
              
                if (isDraw()) {/*
                    setDraw(false);
                    SpielFeld.setReihenfolgeMinus();*/
                    } else {
                    setDraw(true);
                    SpielFeld.setGemalteKreise(); //Zählt anz an gem. Kreisen hoch!
                    SpielFeld.setReihenfolgePlus();
                    initReihe(true); //sodass temp nummer bekommt
                }
            }
        });
        //this.setBackground(Color.MAGENTA); //innerstes Panel
    }
  
    @Override
    public Dimension getPreferredSize() {
        //Größe der kleinen Panels
        return new Dimension(65, 65);
    }
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        int fontSize = 20;
      
        if (draw) {
            g.setColor(color);
            g.fillOval(getWidth()/4, getHeight()/4, getWidth()/2, getHeight()/2);
            g.setFont(new Font("TimesRoman", Font.BOLD, fontSize));
            g.drawString(""+temp, 0, fontSize); //Malt akt. Reihenfolgenummer in Feld
            initReihe(false);
          
        }
    }
    @Override
    public void mouseDragged(MouseEvent e){
      
        }
    @Override
    public void mouseClicked(MouseEvent e) {;}
    @Override
    public void mousePressed(MouseEvent e) {
      
            setPress(true);
      
             System.out.println("Mouse Pressed "+id);
         }
  
    @Override
    public void mouseReleased(MouseEvent e){
        }
    @Override
    public void mouseEntered(MouseEvent e) {
        if (isPressed()){
            setPress(false);
            System.out.println("Mouse Released "+id);
            }
        }
    @Override
    public void mouseExited(MouseEvent e) {;}
    @Override
    public void mouseMoved(MouseEvent e) {;}
}//Ende Circle Klasse
Hat jemand ne Idee wie ich das sonst angehen könnte??? Anbei noch ein Bild zum veranschaulichen.
Danke schonmal im vorraus für eure Hilfe ;)
schaubild.jpeg ei noch ein kleines Bild ^^
Edit: wenn ich zb e.getComponent() mache bekomme ich immer die gleiche, da es ja immer die gleichen Panels sind nur andere Index-Nummer haben
 
Zuletzt bearbeitet:

hollowmaster

Mitglied
Oder gibt es noch irgendwie anders eine Möglichkeit ein Panel über den gesamten Komplex zu machen ? und ich dann einfach einen mouselistener über das große Panel mache ? mit dem glasspane hab ichs schon versucht, jedoch funktioniert entweder der mouselistener oder die paint Methode, leider nicht beides....
 

theo_retiker

Mitglied
Zunächst zum Release:
Also soweit ich das sehe, nimmst du doch auch die flasche Methode für das release Event. Statt der mouseReleased() Methode nimmst du ja die mouseEntered() Methode ...
Java:
@Override
public void mouseEntered(MouseEvent e) {
    if (isPressed()){
        setPress(false);
        System.out.println("Mouse Released "+id);
    }
}

Zum Klick:
Wenn auf der Konsole deine Ausgabe mit "Mouse Pressed ..." auftaucht, dann hast du vermutlich was in der mousePressed() Methode falsch gemacht. Taucht die Ausgabe nicht auf, würde ich mal die mouseClicked Methode versuchen.

mfg
 

hollowmaster

Mitglied
^^ ja weil ja die mousereleased Methode mir die id von dem Panel gibt, wo ich mousepressed gemacht hab.
Also zb: ich klick und lass gedrückt auf Panel[0] und ziehe die maus auf Panel[3], dann bekomm ich von mousepressed id0 und von mousereleased id0 aber ich möchte das er mir id3 gibt >.< verstehst du ?
Und die click-methode wird ja erst ausgelöst, sobald ich released habe
 

theo_retiker

Mitglied
weil ja die mousereleased Methode mir die id von dem Panel gibt, wo ich mousepressed gemacht hab
Stimmt, hatte ich nicht dran gedacht, sry.

Der Trick ist, dass du dir merkst, auf welchem Feld zu gerade bist (in der mouseEntered() immer die ID in einer static Variablen zwischenspeichern) und die ID des Feldes dann ausgibst, wenn mouseReleased() ausgeführt wird:
Java:
private int _id;
static private int _currentID;

public myPanel(int id)
{
    _id = id;

    setText(id + "");
    setSize(100, 100);
    addMouseListener(this);
}

@Override
public void mouseEntered(MouseEvent arg0)
{
    _currentButton = _id;
}

@Override
public void mousePressed(MouseEvent arg0)
{
    System.out.println("Clicked: " + _id);
}

@Override
public void mouseReleased(MouseEvent arg0)
{
    System.out.println("Released: " + _currentID);
}
Hab hier mal nur die wichtigen Teile gepostet, den Rest kann man sich ja denken.

Hoffe das ist das, was du gesucht hast.

mfg
 

hollowmaster

Mitglied
Hey Leute ^^ hab ne ganz kleine Frage deshalb wollte ich kein neuen Thread erstellen.
Also ich habe 3 int Variablen und diese verschachtelten for-Schleifen:
Code:
int x=3, y=3, z=0;
for (int i=0;i<x;i++){
            for (int j=0;j<y;j++){
                System.out.println("z= "+z);
            }
        }
und ich möchte ^^ (nicht lachen) das sich jetzt nach beendigen der beiden schleifen, die 9 in z steht also ich möchte Folgende Ausgabe:
0
1
2
3
4
5
6
7
8
also sollte x irgendwie hochgezählt werden in den beiden forschleifen, aber es muss alle oben genannten werte nacheinander haben von 0-8
wer hat ne Idee ^^ bin grad überfragt hehe
Danke schonmal im vorraus ;)
 

InfectedBytes

Top Contributor
wie wäre es damit dass zu machen was du schon selbst gesagt hast? Einfach z hochzählen?
Java:
int x=3, y=3, z=0;
for (int i=0;i<x;i++){
            for (int j=0;j<y;j++){
                System.out.println("z= "+z);
                z++;
            }
        }
 

hollowmaster

Mitglied
Okay ^^ Vielen Dank ich hab heut echt zu lange programmiert hahahahaha :)
Ich wollte es erst so lösen, dass ich in beiden Schleifen irgendwie hoch und runterzähle xDDD aber auf x++ alleine in der innersten schleife bin ich natürlich nicht gekommen ^^
 

theo_retiker

Mitglied
Und jetzt kannst du ja mal rätseln, warum statt
Java:
System.out.println("z= "+z);
z++;
auch folgendes geht :p
Java:
System.out.println("z= "+z++);
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Variablenübergabe in MousePressed Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben