Motion listener

teslar

Aktives Mitglied
Hi,
ich hab meine Klasse direkt als JPanel gemacht.

Das JFrame habe ich dann später eingefügt.(im Moment ein bisschen unordentlich)
Java:
public class Game_Main extends JPanel implements KeyListener,MouseListener,MouseMotionListener,Runnable
{...
    public Game_Main(String name_,int id, Lobby parent_) throws IOException
    {
        super();
        name=name_;
        parent = parent_;
        frame = new JFrame("Karten_Client/"+name+"/"+id);
        frame.addWindowListener(new WindowAdapter() {
        
            @Override
            public void windowClosing(WindowEvent e) {
                if(parent.clt.client_isConnected())
                    {
                        //beende(name);
                    }
            }
        });
    
        setPreferredSize(new Dimension(x,y));
        setMinimumSize(new Dimension(x,y));
        setMaximumSize(new Dimension(x,y));
        this.setBackground(Color.GRAY);
        frame.setLocation(100, 100);
        frame.add(this);
        frame.addKeyListener(this);
        frame.setVisible(true);
        frame.setResizable(false);
        /*frame.addMouseMotionListener(new MouseAdapter() {

            @Override
            public void mouseMoved(MouseEvent e) {
                if(woIstMaus(e)!=50)focus=feld[woIstMaus(e)];
            }
            
        });*/
        
        frame.setCursor(Toolkit.getDefaultToolkit().createCustomCursor(ImageIO.read(getClass().getResource("/Images/Standart_Cursor.gif")),
                        new Point(0, 0), "standart"));
        
        running=true;
        spst = new Spritestore();
        feld = new Karte[28];
        HandS = new ArrayList<Karte>();
        HandG = new ArrayList<Karte>();
        screen = new Game_Screen(this,x, y);
        fillSP();
        //screen.gebeFeld((Karte[])feld.clone());
        
        frame.pack();
        Thread th = new Thread(this);
        th.start();
    }...
}

Nun möchte ich einen mouseMoved Listener einfügen., aber nichts passiert. Nur wenn ich ihn in das JFrame anfüge klappt es, aber dann passen die Werte bei der Abfrage nicht mehr.

Brauche ein wenig Hilfe.

Ps: Wenn ich mehr aus dem Programm einfügen soll , sagt einfach bescheid, aber ist halt sehr unübersichtlich und auch falsch beschrieben.
 
S

SlaterB

Gast
tja, der Code reicht nicht, zusammengekürzt auf ausführbares funktioniert selbstverständlich überall da ein Listener wo es sinnvoll ist,
im JPanel jedenfalls viel eher verständlich als im JFrame:
Java:
public class Test2 {
    public static void main(String[] args)  {
        new Game_Main();
    }
}

class Game_Main   extends JPanel {
    public Game_Main()  {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setLocation(100, 100);
        frame.add(this);
        // frame.pack();
        frame.setVisible(true);
        frame.setResizable(false);

        addMouseMotionListener(new MouseMotionAdapter()    {
                @Override
                public void mouseMoved(MouseEvent e)   {
                    System.out.println(e.getX() + ", " + e.getY());
                }
            });
    }
}
ohne ein ausführbares Programm geht gar nichts,
ob ich noch ein zweites Mal diese Arbeit auf mich nehme, nachdem beim ersten Mal völlig umsonst, überlege ich mir nun genau..,

überlege mal was genau dich selber gehindert hat, deinen Code vom ersten Posting zu nehmen und genau wie ich ausführbar zu machen?

dass eine Zeile wie
Java:
HandS = new ArrayList<Karte>();
eine wichtige Rolle spielt ist ja kaum anzunehmen ;)

wichtig ist alles zum Layout, zu Size-Aufrufen usw.,

Java:
        setPreferredSize(new Dimension(x,y));
        setMinimumSize(new Dimension(x,y));
        setMaximumSize(new Dimension(x,y));
etwa könnte sehr fraglich sein, was ist da x und y?
ob das Panel letztlich überhaupt Platz einnimmt oder nur 0x0 Pixel sollte doch wohl grundsätzlich vorher zu testen sein,
setze eine Hintergrundfarbe, einen Border usw.

> this.setBackground(Color.GRAY);
hast du ja schon drin, ist das deutlich gegenüber andersfarbigen Hintergrund zu sehen?

-------

pack() oder irgendwas anderes zur GUI noch NACH setVisible(true) unbedingt vermeiden!
 
Zuletzt bearbeitet von einem Moderator:

X5-599

Top Contributor
Wenn ich das richtig sehe müsstest du in deiner Klasse Game_Main die Methoden des MouseMotionListeners implementieren und dann in dessen Konstruktor setzen:

Java:
public Game_Main()
{
	//...
	addMouseMotionListener(this);
	//...
}

	@Override
	public void mouseDragged(MouseEvent e) {
		//mouse dragged
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		//mouse moved
	}
 

teslar

Aktives Mitglied
Das Programm ist schon länger in Benutzung, also es funktioniert, den Background könnte ich auch rausnehmen, es ist halt alles noch ein bisschen unaufgeräumt.


Es tut mir leid, das ich nicht nachgedacht habe, als ich den Ausschnitt reingesetzt habe.
Es lag wahrscheinlich daran, das ich
Java:
    addMouseMotionListener(this);
vergessen habe^^

danke.
 

teslar

Aktives Mitglied
eine Sache habe ich noch.
Der Moved - Listener fragt erst dann ab, wenn ich mit der Maus wieder stehen bleibe.

Ist ja auch glaube ich normal so, ist für mein Projekt auch in Ordnung.
Aber ich brauche noch ein Event, das reagiert, sobald die Maus beginnt sich zu bewegen.
Gibt es so etwas?
 
S

SlaterB

Gast
es gibt nur eine Art von mouseMove, die ziemlich viele Ereignisse ausgibt,
'ziemlich viel' ist natürlich recht unbestimmt,
wenn man die Maus richtig über den Bildschirm jagt, sollte man aber immer noch einige Punkte/ Events bekommen:
Code:
 X  X      X                     X                        X                                     X  X
bei langsamer Bewegung quasi jeden Pixel

also benutze vielleicht Standardbeispiele um zu sehen ob es allgemein Massen an Events gibt,
für dein Programm habe ich persönlich gerade kaum, was da sein könnte..,
finden noch lange Aktionen im Listener statt?
genau der Endpunkt geht? man wackelt doch immer noch ein bisschen mit der Maus..
 

teslar

Aktives Mitglied
danke,

im Moment benutz ich ja mouseMoved, die Aktionen finden direkt im listener statt.
Aber ich hab nachgeguckt. Es wird hier nur das Event gestartet, nachdem die Maus bewegt wurde.
Invoked when the mouse cursor has been moved onto a component but no buttons have been pushed.

Mit mouseMove sollte es ja dann funktionieren, kann ich aber nicht hinzufügen, ich finde nur mouseMoved


EDIT: Ich habe noch einmal nachgeschaut, der listener aktiviert sich auch, wenn ich nicht stehen bleibe, aber er braucht immer ca 1 Sekunde.
Java:
int x = 1000;
int y = 700;
@Override
    public void mouseMoved(MouseEvent e) {
        if(woIstMaus(e)!=50)focus=feld[woIstMaus(e)];
    }

    private int woIstMaus(MouseEvent e) {
        
        if(e.getY()>=(y*1/10)+28&&e.getY()<=(y*1/10)+99+28)//28/1
        {
            
            for (int i = 0; i < 5; i++) 
            {
                if(e.getX()>=(x*2/10)+152+i*106&&e.getX()<=(x*2/10)+221+i*106)return 1+i;
            }
            
        }if(e.getY()>=(y*1/10)+134&&e.getY()<=(y*1/10)+99+134)//134/8
        {
            
            for (int i = 0; i < 5; i++) 
            {
                if(e.getX()>=(x*2/10)+152+i*106&&e.getX()<=(x*2/10)+221+i*106)return 8+i;
            }
            
        }if(e.getY()>=(y*1/10)+291&&e.getY()<=(y*1/10)+99+291)//291/15
        {
            
            for (int i = 0; i < 5; i++) 
            {
                if(e.getX()>=(x*2/10)+152+i*106&&e.getX()<=(x*2/10)+221+i*106)return 15+i;
            }
            
        }if(e.getY()>=(y*1/10)+397&&e.getY()<=(y*1/10)+99+397)//397/22
        {
            
            for (int i = 0; i < 5; i++) 
            {
                if(e.getX()>=(x*2/10)+152+i*106&&e.getX()<=(x*2/10)+221+i*106)return 22+i;
            }
            
        }
        return 50;
    }
also es könnte sein, das er so langsam reagiert, weil ich die sehr viele (unnötige) Rechnungen drinn habe, aber knapp eine Sekunde?
 
Zuletzt bearbeitet:
S

SlaterB

Gast
nicht vorstellbar, aber nimm einfach testweise den Listener aus meinem Programm,
kommst du im Moment überhaupt überall hin?

wenn wiederum meine Theorie gilt, dass das Panel für den Listener ziemlich klein ist, dann gäbe es natürlich nur Events
wenn die Maus auch dort ist,
allerdings selbst auf kleiner Fläche ziemlich viele, schwer miszuinterpretieren,

anfangs hattest du ja
"Nur wenn ich ihn in das JFrame anfüge klappt es, aber dann passen die Werte bei der Abfrage nicht mehr."
waren es dort viele Events?

siehe auch Test-Programm unter
How to Write a Mouse-Motion Listener (The Java™ Tutorials > Creating a GUI With JFC/Swing > Writing Event Listeners)
in Kürze solltest du da soviele Ausgaben haben dass die Scrollbar klein wird, wie man im Beispiel-Screenshot sieht
teils für jeden Pixel einer Bewegung,
das muss das Ziel sein

wenn es im Testprogramm auch hakt, dann ist es was allgemeines, sonst in deinem Programm noch etwas zu vermuten,
was (zumindest für mich) bisher unsichtbar blieb

direkt fragen kann man danach also nicht, je mehr Informationen oder Code bis hin zu einem vollständigen Testprogramm du postest, desto eher zu finden,
oder eben selber testen mit z.B. System.out.println im Listener

-----------


woher merkst du im Moment überhaupt, wieviele Events es sind?
ohne Ausgabe wird vielleicht ständig dasselbe berechnet oder die endgültige Zuweisung
> focus=feld[woIstMaus(e)];
bleibt die meiste Zeit ohne Effekt?! was soll es bewirken, wer reagiert darauf wie wann wo warum?
 

teslar

Aktives Mitglied
also ich hab grad kaum Zeit, weil ich noch unterwegs bin,

aber ich kann sagen, das mein JPanel auf 1000:700 skaliert ist, und das JFrame (fast) genau so groß ist, da es nur das eine Panel und das eine Frame gibt.

was noch sein kann, ist, das ich die Listener implementiert habe. vielleicht geht es besser, wenn ich sie nur über Adapter hinzufüge.

was auch noch sein kann, ist das dieses Frame innerhalb eines anderen Frames ausgeführt wird (Lobby+Spiel).
In der Lobby sind schon einige Threads am laufen, aufgrund einer Server-Client-Verbindung, und das Spielframe wird auch innerhalb eines Threads gestartet.

Hatte auch so schon ein Problem, das es recht langsam startet, dachte aber nicht das es so schlimm wäre.

Ich werde Heute Abend oder in den nächsten Tagen mal versuchen, eine übersichtliche Version des Programmes zu machen mit Kommentaren usw. und werde auch versuchen, selber Fehler zu finden...
 

teslar

Aktives Mitglied
Hat sich erledigt,
habe den Listener gelöscht, und frage die Mausposition in der Hauptspielschleife ab.

Danke an alle

bb
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Developer_X Mouse MOTION listener example Java Basics - Anfänger-Themen 5
T Variable durch Action Listener ändern Java Basics - Anfänger-Themen 2
D String value change listener Java Basics - Anfänger-Themen 2
topi WindowAdapter / Listener / Event Java Basics - Anfänger-Themen 4
L Problem mit Listener Java Basics - Anfänger-Themen 0
P Listener registrieren Java Basics - Anfänger-Themen 40
Salo JTabel Selection listener Bsp. Java Basics - Anfänger-Themen 3
W JLabel, Farbe durch Listener ändern Java Basics - Anfänger-Themen 6
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
V JTable welcher Listener ? Java Basics - Anfänger-Themen 7
J Verständnis Problem Java-Listener. Java Basics - Anfänger-Themen 59
M Compiler-Fehler Using action listener Java Basics - Anfänger-Themen 1
F Listener schreiben Java Basics - Anfänger-Themen 1
P Eigene Knöpfe mit eigenem Listener Java Basics - Anfänger-Themen 5
B Listener beim Laden (deserialize) wieder hinzufügen bzw. mitspeichern? Java Basics - Anfänger-Themen 3
J Listener Java Basics - Anfänger-Themen 4
kaoZ Best Practice Verständnisfrage Listener bei lokalen Objekten Java Basics - Anfänger-Themen 8
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
llabusch Kombinationsfeld - LISTENER Java Basics - Anfänger-Themen 0
S Eigenen Listener zu eigenen Button! Java Basics - Anfänger-Themen 5
S Listener reagieren nicht mehr Java Basics - Anfänger-Themen 3
O Laufender Timer+Action Listener in Thread VS isAlive() Java Basics - Anfänger-Themen 4
E Mein eigener Listener (Hilfe gesucht) Java Basics - Anfänger-Themen 2
K On Click listener Problem Java Basics - Anfänger-Themen 4
L JTextField/Listener Input Problem Java Basics - Anfänger-Themen 2
M Listener einerm JPanel hinzufuegen Java Basics - Anfänger-Themen 3
G Listener ohne Objekt Java Basics - Anfänger-Themen 5
T Button Text mit Action Listener [Hilfe!] Java Basics - Anfänger-Themen 10
H Eigenen Listener einbauen Java Basics - Anfänger-Themen 5
K Key Listener bei 2 gleichzeitig gedrückten tasten Java Basics - Anfänger-Themen 3
M Bäume und Listener Java Basics - Anfänger-Themen 2
K Erste Schritte table Listener noob frage Java Basics - Anfänger-Themen 3
E eigenständige Listener-Klasse Java Basics - Anfänger-Themen 9
U Listener erstellen Java Basics - Anfänger-Themen 16
N Variablen aus Action Listener lesen und weiterverarbeiten Java Basics - Anfänger-Themen 12
M listener Java Basics - Anfänger-Themen 16
L Listener Problem in Klasse Java Basics - Anfänger-Themen 8
P Listener für mehrere Buttons Java Basics - Anfänger-Themen 3
L Window Listener Java Basics - Anfänger-Themen 2
Kenan89 JTable: Listener Java Basics - Anfänger-Themen 4
N Klassen auf den Action Listener in einer andere Klasse zugreifen Java Basics - Anfänger-Themen 6
A action listener Java Basics - Anfänger-Themen 8
M Netbeans Listener - Anonymous, inner class, main class? Java Basics - Anfänger-Themen 4
K Action Listener reagiert nicht auf Button druck mehr??? Java Basics - Anfänger-Themen 4
E Mehrere Listener auf einen Button? Java Basics - Anfänger-Themen 3
P Input/Output InputStream Listener? Java Basics - Anfänger-Themen 7
X Problem bezüglich Key Listener Java Basics - Anfänger-Themen 3
Y Button hört nicht auf Listener Java Basics - Anfänger-Themen 5
H JTable, Listener und CellEditor Java Basics - Anfänger-Themen 8
H Listener und Events entfernen Java Basics - Anfänger-Themen 2
B OOP Eigener Event-Listener erstellen Java Basics - Anfänger-Themen 4
M Listener Objekte Java Basics - Anfänger-Themen 12
S Applet Key Listener Java Basics - Anfänger-Themen 6
J Action Listener Java Basics - Anfänger-Themen 2
G Probleme mit Listener Java Basics - Anfänger-Themen 27
B Wert einer Variable mit Listener ueberwachen Java Basics - Anfänger-Themen 3
F Port Listener Java Basics - Anfänger-Themen 9
J JComboBox Listener Java Basics - Anfänger-Themen 6
J Window-Listener funktionieren nicht Java Basics - Anfänger-Themen 7
N Frage zu Listener für Textfelder Java Basics - Anfänger-Themen 5
Benji0815 Eigenen Listener schreiben Java Basics - Anfänger-Themen 13
M Probleme beim Aufruf von Listener in anderer Klasse Java Basics - Anfänger-Themen 9
S Key-Listener richtig "einbauen" Java Basics - Anfänger-Themen 42
S Listener von ausserhalb aufrufen Java Basics - Anfänger-Themen 2
S Action Listener Java Basics - Anfänger-Themen 6
Sweety Listener in Swing Java Basics - Anfänger-Themen 8
Hamstinator Design und Listener in verschiedenen Klassen Java Basics - Anfänger-Themen 6
J Mouse-Listener Java Basics - Anfänger-Themen 3
I Listener Klassen in Package Java Basics - Anfänger-Themen 3
StickToFreak Applet -> GameLoop + Listener / Listener funktioniert nicht Java Basics - Anfänger-Themen 22
B externer Listener für Zeichenbereich? Java Basics - Anfänger-Themen 2
D dialog listener? Java Basics - Anfänger-Themen 2
G Key Listener arbeitet Fehlerhaft Java Basics - Anfänger-Themen 6
C Listener und Events Java Basics - Anfänger-Themen 10
E Listener Java Basics - Anfänger-Themen 2
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
G jtable listener wenn zeile markiert wird Java Basics - Anfänger-Themen 6
S Action Listener Funktioniert nicht Java Basics - Anfänger-Themen 6
D Kombinationsfeld => Realisierung im Listener? Java Basics - Anfänger-Themen 2
G LIstener bei JavaMail Java Basics - Anfänger-Themen 2
G Context Listener des Apache Tomcat verwenden Java Basics - Anfänger-Themen 4
D Listener bzw. Interfaces Java Basics - Anfänger-Themen 7
A Wo/Wie Event Listener Java Basics - Anfänger-Themen 3
G Window Listener? Java Basics - Anfänger-Themen 2
G 2 Listener wiedersprechen sich. Java Basics - Anfänger-Themen 12
G Listener für JPanel für Statusmeldungen Java Basics - Anfänger-Themen 3
F Listener für Variable Java Basics - Anfänger-Themen 29
A Gibt es standardmässig in Java einen Verzeichnis-Listener? Java Basics - Anfänger-Themen 6
N Listener für datei Java Basics - Anfänger-Themen 13
S Mit Listener AWT Objekte ansprechen Java Basics - Anfänger-Themen 2
G listener für radiobutton Java Basics - Anfänger-Themen 1
G Listener Java Basics - Anfänger-Themen 5
G Listener Problem Java Basics - Anfänger-Themen 3
B Wiso funktioniet das nicht? (Listener) Java Basics - Anfänger-Themen 6
H Key Listener macht nicht das was er soll Java Basics - Anfänger-Themen 4
T Wartet Klasse auf Listener? Java Basics - Anfänger-Themen 3
D Listener? Java Basics - Anfänger-Themen 2
S Listener auf JTextfeld Java Basics - Anfänger-Themen 8
B Kommunikation zwischen Klasse und Listener Java Basics - Anfänger-Themen 2
C Benutzereingaben vor Listener abfangen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben