Mouse- und KeyListener Probleme?

HiImSkulte

Mitglied
Hallo Java Community,
ich bin gerade dabei, mein erstes Spiel richtig umzusetzen und habe nun folgendes Problem:
In meiner KeyHandler Klasse die vom KeyListener erbt, habe ich festgelegt, dass wenn man ESCAPE drückt, sich das Spiel schließt. Das funktioniert auch wenn ich das Spiel starte und dann ohne etwas zu machen ESCAPE drücke, allerdings wenn ich das Spiel offen hab und meinetwegen einmal mit der Mouse in das Fenster klicke, macht ESCAPE bei mir garnichts mehr. Sehr komisch.
Und bei meinem MouseListener, habe ich das Problem, dass er garnicht macht, was ich von ihm will, hier mein Code:

Meine Frame-Klasse in der mein Window geöffnet wird, etc.:
Java:
public class Frame extends Canvas implements Runnable {

    public static final int WIDTH = 1280;
    public static final int HEIGHT = 960;
    public static final String TITLE = "Unnamed";
    public static final String PATH = "C:\\Users\\----\\Desktop\\Workspaces\\Bigger Games Workspace\\UnnamedProject\\src\\res\\";
   
    private JFrame frame;
    private Thread game;
   
    private boolean running = false;
   
    public Frame() {
        frame = new JFrame();
       
        frame.setSize(WIDTH, HEIGHT);
        frame.setTitle(TITLE);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        frame.setUndecorated(true);
        frame.add(this);
        frame.addKeyListener(new KeyHandler());
        frame.addMouseListener(new MouseHandler());
        frame.addMouseMotionListener(new MouseHandler());
        frame.setVisible(true);
    }
   
    public void start() {
        running = true;
        game = new Thread(this, "gamethread");
        game.start();
    }
   
    public void stop() {
        running = false;
        try {
            game.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
   
    public void run() {
        while (running) {
            try {
                render();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private void render() throws IOException {
        BufferStrategy bs = getBufferStrategy();
        if (bs == null) {
            createBufferStrategy(3);
            return;
        }
       
        Graphics g = bs.getDrawGraphics();
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, WIDTH, HEIGHT);
       
        try {
            new TileGrid(g);
            new Resources(g);
            new BuyMenu(g);
        } catch (IOException e) {
            e.printStackTrace();
        }
       
        g.dispose();
        bs.show();
    }
}

Mein KeyHandler:
Java:
public class MouseHandler implements MouseListener, MouseMotionListener {

    public int mousex;
    public int mousey;
   
    // global variables
    public boolean buyButtonHovered = false;
    public boolean buyButtonClicked = false;
   
    @Override
    public void mouseDragged(MouseEvent e) {
       
    }

    @Override
    public void mouseMoved(MouseEvent e) {
        mousex = e.getX();
        mousey = e.getY();
       
        if ((mousex > WIDTH && mousex < WIDTH - 64) && (mousey > HEIGHT && mousey < HEIGHT - 64)) {
            buyButtonHovered = true;
        } else {
            buyButtonHovered = false;
        }
       
        System.out.println("Buy Button hovered: " + buyButtonHovered);
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        if ((mousex > WIDTH && mousex < WIDTH - 64) && (mousey > HEIGHT && mousey < HEIGHT - 64)) {
            buyButtonHovered = false;
            buyButtonClicked = true;
        } else {
            buyButtonClicked = false;
        }
       
        System.out.println("Buy Button clicked: " + buyButtonClicked);
    }

    @Override
    public void mouseEntered(MouseEvent e) {
       
    }

    @Override
    public void mouseExited(MouseEvent e) {
       
    }

    @Override
    public void mousePressed(MouseEvent e) {
       
    }

    @Override
    public void mouseReleased(MouseEvent e) {
       
    }

    public int getMousex() {
        return mousex;
    }

    public int getMousey() {
        return mousey;
    }

    public boolean isBuyButtonHovered() {
        return buyButtonHovered;
    }

    public boolean isBuyButtonClicked() {
        return buyButtonClicked;
    }
}

Ich bin sehr dankbar für jede Hilfe :)
MfG Skulte
 

Joose

Top Contributor
In meiner KeyHandler Klasse die vom KeyListener erbt, habe ich festgelegt ....
Zeig uns doch auch bitte die Klasse KeyHandler ;)

, dass wenn man ESCAPE drückt, sich das Spiel schließt. Das funktioniert auch wenn ich das Spiel starte und dann ohne etwas zu machen ESCAPE drücke, allerdings wenn ich das Spiel offen hab und meinetwegen einmal mit der Mouse in das Fenster klicke, macht ESCAPE bei mir garnichts mehr. Sehr komisch.
Wird der KeyHandler überhaupt ausgelöst dann?

Und bei meinem MouseListener, habe ich das Problem, dass er garnicht macht, was ich von ihm will, hier mein Code:
"er gar nicht macht, was ich von ihm will" ist keine Fehlerbeschreibung.
Was sollte passieren? Was passiert stattdessen?
Was mir auffällt ist das du 2 Instanzen deines MouseHandlers erstellst. Sicher das du nicht nur eine Instanz erstellen willst und diese als MouseListener und MouseMotionListener verwenden willst?
 

HiImSkulte

Mitglied
Zeig uns doch auch bitte die Klasse KeyHandler ;)
Ich merke gerade, da ist etwas schiefgelaufen :confused:
Ich poste nochmal meinen KeyHandler, das da oben war ja der MouseListener :oops:.

Wird der KeyHandler überhaupt ausgelöst dann?
Ich werde noch einmal ausprobieren was passiert, aber anscheinend wird er nur ausgelöst wenn ich noch nichts in dem Fenster gemacht hab..

"er gar nicht macht, was ich von ihm will" ist keine Fehlerbeschreibung.
Was sollte passieren? Was passiert stattdessen?
Was mir auffällt ist das du 2 Instanzen deines MouseHandlers erstellst. Sicher das du nicht nur eine Instanz erstellen willst und diese als MouseListener und MouseMotionListener verwenden willst?
Er soll einfach erstmal überhaupt in die Konsole etwas schreiben (wie man im MouseHandler sieht) damit ich sehe das etwas passiert/es funktioniert. Stattdessen macht er garnichts.
Wegen den Instanzen gucke ich nochmal, aber ich müsste doch eigentlich für das Frame MouseListener und MouseMotionListener seperat instanziieren, oder?

Danke erstmal für deine Antwort :)

KeyHandler:
Java:
public class KeyHandler implements KeyListener {

    @Override
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_ESCAPE)
            System.exit(0);
    }

    @Override
    public void keyReleased(KeyEvent e) {
       
    }

    @Override
    public void keyTyped(KeyEvent e) {
       
    }

}
 

Joose

Top Contributor
Ich werde noch einmal ausprobieren was passiert, aber anscheinend wird er nur ausgelöst wenn ich noch nichts in dem Fenster gemacht hab..
Du fügst den KeyHandler dem JFrame hinzu. Sobald das JFrame den Fokus verliert passiert nichts mehr.
Füge dem Canvas doch den KeyHandler hinzu ;)

Er soll einfach erstmal überhaupt in die Konsole etwas schreiben (wie man im MouseHandler sieht) damit ich sehe das etwas passiert/es funktioniert. Stattdessen macht er garnichts.
Ähnlich dem Problem vom KeyHandler, du fügst den MouseHandler zum JFrame hinzu, bewegst die Maus dann aber über dem Canvas ;)

Wegen den Instanzen gucke ich nochmal, aber ich müsste doch eigentlich für das Frame MouseListener und MouseMotionListener seperat instanziieren, oder?
Warum? Du kannst eine Klasse schreiben welche das KeyListener, das MouseListener und das MouseMotionListener Interface implementiert.
Dann müsstest du nur eine Instanz dieser Klasse erstellen. Diese Instanz kannst du als MouseListener, KeyListener und MouseMotionListener registrieren (da ja die Klasse jedes dieser Interfaces implementiert).
Das Problem ist wenn du für den MouseMotionListener und den MouseListener jeweils eine seperate Instanz erstellst habe beide auch ihre jeweiligen Attribute. Während bei dem einen dann die Attribute "mousex" und "mousey" gesetzt werden, bleiben diese Werte beim anderen unverändert.
 

HiImSkulte

Mitglied
Warum? Du kannst eine Klasse schreiben welche das KeyListener, das MouseListener und das MouseMotionListener Interface implementiert.
Dann müsstest du nur eine Instanz dieser Klasse erstellen. Diese Instanz kannst du als MouseListener, KeyListener und MouseMotionListener registrieren (da ja die Klasse jedes dieser Interfaces implementiert).
Das Problem ist wenn du für den MouseMotionListener und den MouseListener jeweils eine seperate Instanz erstellst habe beide auch ihre jeweiligen Attribute. Während bei dem einen dann die Attribute "mousex" und "mousey" gesetzt werden, bleiben diese Werte beim anderen unverändert.
Danke, wieder was gelernt ^^.
Allerdings wenn ich meinem Canvas jetzt per
Java:
private KeyHandler kh;

public Frame() {
    this.addKeyListener(kh);
}
den KeyHandler hinzufüge, passiert auch nichts mehr.
Ich weiß nicht ob ich deinen Tipp, KeyHandler und MouseHandler dem Canvas hinzuzufügen, falsch interpretiert habe oder es einfach gerade nicht auf die Reihe kriege?

Trotzdem danke für die schnelle Hilfe :)
 

HiImSkulte

Mitglied
Danke, wieder was gelernt ^^.
Allerdings wenn ich meinem Canvas jetzt per
Java:
private KeyHandler kh;

public Frame() {
    this.addKeyListener(kh);
}
den KeyHandler hinzufüge, passiert auch nichts mehr.
Ich weiß nicht ob ich deinen Tipp, KeyHandler und MouseHandler dem Canvas hinzuzufügen, falsch interpretiert habe oder es einfach gerade nicht auf die Reihe kriege?

Trotzdem danke für die schnelle Hilfe :)

Ok, ich entschuldige mich für meine eigene Dummheit... Ich hab natürlich vergessen kh auch zuzuweisen..
Danke hab es jetzt ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
0 Mouse nicht ausserhalb der Applikation zulassen Java Basics - Anfänger-Themen 20
T fenster schliesen und mouse events in einer nicht abstrakten klasse Java Basics - Anfänger-Themen 6
M Buttons erscheinen erst bei Mouse-Over Java Basics - Anfänger-Themen 8
H Mac Mighty Mouse horizontales Scrollen Java Basics - Anfänger-Themen 7
Weiti Anzeige von komponenten erst bei Mouse-Over Java Basics - Anfänger-Themen 3
Developer_X Mouse MOTION listener example Java Basics - Anfänger-Themen 5
J Mouse-Listener Java Basics - Anfänger-Themen 3
A JButton erscheint erst bei mouse over Java Basics - Anfänger-Themen 3
M mouse Pressed und Mouse Clicked Java Basics - Anfänger-Themen 3
M Mouse Listener liefert das ergebnis 2 mal! Java Basics - Anfänger-Themen 2
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
M KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
N Java Keylistener Java Basics - Anfänger-Themen 2
B KeyListener funkioniert nicht Java Basics - Anfänger-Themen 2
F KeyListener Java Basics - Anfänger-Themen 3
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
J-Gallus Keylistener verstehen Java Basics - Anfänger-Themen 17
S Keylistener Java Basics - Anfänger-Themen 16
S Keylistener im Grafikfenster Java Basics - Anfänger-Themen 3
N KeyListener in Thread Java Basics - Anfänger-Themen 0
LexeB4F for schliefe in KeyListener Java Basics - Anfänger-Themen 3
R KeyListener auslagern Java Basics - Anfänger-Themen 3
J KeyListener aus anderer Klasse bereitet Probleme Java Basics - Anfänger-Themen 1
Z KeyListener funktioniert nicht? Weshalb? Java Basics - Anfänger-Themen 8
T KeyListener Java Basics - Anfänger-Themen 2
Gfreak23 Input/Output KeyListener funktioniert auf Laptop nicht allerdings auf Tower-PC Java Basics - Anfänger-Themen 8
J KeyListener - mal wieder... Java Basics - Anfänger-Themen 2
TheSorm KeyListener Problem Java Basics - Anfänger-Themen 4
M KeyListener Java Basics - Anfänger-Themen 3
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
D KeyListener nicht mehr aktiv nach ActionPerformed Java Basics - Anfänger-Themen 2
C Mehrere Tasten beim KeyListener gleichzeitig lesen Java Basics - Anfänger-Themen 2
L Input/Output Java 3D mit KeyListener Java Basics - Anfänger-Themen 1
S KeyListener reagiert nicht. Java Basics - Anfänger-Themen 4
L KeyListener ohne textfeld Java Basics - Anfänger-Themen 4
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
B KeyListener als allgemeine Methode Java Basics - Anfänger-Themen 5
H KeyListener auf ganzes Fenster setzen Java Basics - Anfänger-Themen 14
0 KeyListener ausserhalb der Applikation Java Basics - Anfänger-Themen 5
G KeyListener Java Basics - Anfänger-Themen 4
D KeyListener und ActionListener Problem Java Basics - Anfänger-Themen 6
J KeyListener funtioniert nicht! Java Basics - Anfänger-Themen 3
J KeyListener Java Basics - Anfänger-Themen 11
P Input/Output KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
G KeyListener, Fokus Java Basics - Anfänger-Themen 8
K Input/Output KeyListener funktioniert nicht Java Basics - Anfänger-Themen 3
A Input/Output Keylistener Aktiv schalten Java Basics - Anfänger-Themen 8
J keyListener - Genau 1 Aktion soll bei 1 Tastenausdruck ausgeführt werden Java Basics - Anfänger-Themen 11
S KeyListener Java Basics - Anfänger-Themen 2
A Erste Schritte Problem mit KeyListener Java Basics - Anfänger-Themen 6
Maxim6394 KeyListener geht nicht Java Basics - Anfänger-Themen 15
A Wie KeyListener adden? Java Basics - Anfänger-Themen 15
Maxim6394 KeyListener funktioniert nicht Java Basics - Anfänger-Themen 20
U KeyListener StackOverflowError Java Basics - Anfänger-Themen 2
W KeyListener auf Applet mit Runnable Java Basics - Anfänger-Themen 4
M Apfel-Spiel KeyListener Java Basics - Anfänger-Themen 33
J KeyListener (keyTyped) funktioniert nicht Java Basics - Anfänger-Themen 9
Luk10 KeyListener Java Basics - Anfänger-Themen 13
S KeyListener aus anderer Klasse hinzufügen Java Basics - Anfänger-Themen 19
P KeyListener im Applet Java Basics - Anfänger-Themen 2
S KeyListener-Anwendung Java Basics - Anfänger-Themen 7
O KeyListener funktioniert nur wenn er will Java Basics - Anfänger-Themen 2
A KeyListener funzt ned Java Basics - Anfänger-Themen 6
D KeyListener, Unterscheidung Groß/Kleinbuchstaben Java Basics - Anfänger-Themen 3
S KeyListener als class? Java Basics - Anfänger-Themen 4
F Applet mit KeyListener, "Alt"-Taste und Konflikt mit Browser Java Basics - Anfänger-Themen 2
P KeyListener Java Basics - Anfänger-Themen 2
S KeyListener für einfaches Programm Java Basics - Anfänger-Themen 3
S KeyListener aktiv auch wenn minimiert? Java Basics - Anfänger-Themen 4
Z Globaler Keylistener Java Basics - Anfänger-Themen 2
V KeyListener Beispiel Java Basics - Anfänger-Themen 13
T canvas killt KeyListener Java Basics - Anfänger-Themen 2
Das Brot Nach .add(JRadioButton) funktioniert der KeyListener nicht mehr Java Basics - Anfänger-Themen 2
J Keylistener aber wie jTextField auswahl? Java Basics - Anfänger-Themen 3
D KeyListener, nichts passiert Java Basics - Anfänger-Themen 6
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
D Keylistener zu langsam Java Basics - Anfänger-Themen 7
C Problem mit JPopupMenu, JTextField und Keylistener Java Basics - Anfänger-Themen 2
G Keylistener in einer Schleife Java Basics - Anfänger-Themen 9
M problem mit keylistener Java Basics - Anfänger-Themen 2
M TabbedPane: KeyListener funktioniert nicht mehr Java Basics - Anfänger-Themen 8
N KeyListener ohne GUI? Java Basics - Anfänger-Themen 5
M KeyListener Java Basics - Anfänger-Themen 3
T KeyListener wird nicht ausgelöst Java Basics - Anfänger-Themen 6
O KeyListener Java Basics - Anfänger-Themen 8
Developer_X KeyListener ohne JFrame Java Basics - Anfänger-Themen 13
H KeyListener Java Basics - Anfänger-Themen 4
Developer_X KeyListener Actions (hat mit Java3D zu tun) Java Basics - Anfänger-Themen 20
H KeyListener funktioniert nicht Java Basics - Anfänger-Themen 8
Developer_X JFrame soll KeyListener adden Java Basics - Anfänger-Themen 32
F Keylistener Java Basics - Anfänger-Themen 12
hdi KeyListener : keyTyped() nicht nutzbar? Java Basics - Anfänger-Themen 1
StickToFreak Runnable + KeyListener? Java Basics - Anfänger-Themen 32
dl85hej Keylistener Java Basics - Anfänger-Themen 16

Ähnliche Java Themen

Neue Themen


Oben