Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Java
You last visited: Today at 23:36

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Java] KeyListener auf JFrame

Discussion on [Java] KeyListener auf JFrame within the Java forum part of the Coders Den category.

Reply
 
Old   #1
 
Chicken17's Avatar
 
elite*gold: 7
Join Date: May 2009
Posts: 6,910
Received Thanks: 4,497
[Java] KeyListener auf JFrame

Hey,
ich bekomms irgendwie nicht hin, dass der KeyListener auf meinem JFrame tut. So ist er eigentlich direkt auf der Form, aber es passiert nichts



Chicken17 is offline  
Old 02/21/2014, 08:47   #2
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,228
Das JFrame muss einen Focus haben, sonst geht es auf einer JFrame direkt nicht.

Code:
...
Container con = getContentPane();
con.setFocusable(true);
con.addKeyListener(MyListener);
...
XxharCs is offline  
Thanks
1 User
Old 02/21/2014, 08:52   #3

 
Aegir112's Avatar
 
elite*gold: 0
Join Date: Jun 2013
Posts: 294
Received Thanks: 38
this.addKeyListener(Listener);

Wenn du JFrame in der Klasse extended hast.
Aegir112 is offline  
Thanks
1 User
Old 02/22/2014, 15:02   #4
 
karlchen1's Avatar
 
elite*gold: 27
Join Date: Jul 2010
Posts: 282
Received Thanks: 46
Wenn du möchtest, dass der KeyListener auch außerhalb des JFrames funktioniert (also das JFrame nicht im Fokus ist), dann kannst du das mit JNI machen, und einen nativen Keyboard Hook nehmen.
karlchen1 is offline  
Thanks
1 User
Old 02/22/2014, 19:17   #5
 
Chicken17's Avatar
 
elite*gold: 7
Join Date: May 2009
Posts: 6,910
Received Thanks: 4,497
Quote:
Originally Posted by XxharCs View Post
Das JFrame muss einen Focus haben, sonst geht es auf einer JFrame direkt nicht.

Code:
...
Container con = getContentPane();
con.setFocusable(true);
con.addKeyListener(MyListener);
...
Hab bei meinem JFrame eigentlich nen Hacken bei setFocusable gemacht, bloß im Quelltext steht das nirgends.
Hab mal den Key listener auf ein Label gesetzt, da funktioniert es.
Bloß das komische ist, dass ich ein paar Buttons hab und wenn ich auf die drauf drück die ne Funktion haben dann tut der Listener danach immer noch aber bei nem Druck auf die bei denen nichts passiert tut er danach nicht mehr.

Aber die werden ja auch noch belegt und wenn es dann tut ist das ja egal

@Karlchen, das brauch ich hier zwar nicht, aber bei einer anderen Funktion von meinem Programm ist das ziemlich nützlich! Danke
Chicken17 is offline  
Old 02/23/2014, 18:59   #6
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
Kleines Beispiel, vielleicht hilft es dir.

Code:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;

public class MyFrame extends JFrame implements KeyListener
{
    public MyFrame()
    {
        this.addKeyListener(this);
        
        this.setSize(200,200);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);
    }

    @Override
    public void keyTyped(KeyEvent e) 
    {
        System.out.println(e.getKeyChar());
    }

    @Override
    public void keyPressed(KeyEvent e) 
    {

    }

    @Override
    public void keyReleased(KeyEvent e) 
    {

    }    
    
    public static void main(String[] args) 
    {
        MyFrame f = new MyFrame();
    }
}
Natürlich empfiehlt es sich die ganzen Listener in eine
eigene Klasse zu schreiben, wie gesagt soll das hier nur
ein kleines funktionierendes Beispiel sein.
.SkyneT. is offline  
Thanks
1 User
Old 02/25/2014, 20:23   #7
 
Chicken17's Avatar
 
elite*gold: 7
Join Date: May 2009
Posts: 6,910
Received Thanks: 4,497
Quote:
Originally Posted by .SkyneT. View Post
Kleines Beispiel, vielleicht hilft es dir.

Code:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;

public class MyFrame extends JFrame implements KeyListener
{
    public MyFrame()
    {
        this.addKeyListener(this);
        
        this.setSize(200,200);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);
    }

    @Override
    public void keyTyped(KeyEvent e) 
    {
        System.out.println(e.getKeyChar());
    }

    @Override
    public void keyPressed(KeyEvent e) 
    {

    }

    @Override
    public void keyReleased(KeyEvent e) 
    {

    }    
    
    public static void main(String[] args) 
    {
        MyFrame f = new MyFrame();
    }
}
Natürlich empfiehlt es sich die ganzen Listener in eine
eigene Klasse zu schreiben, wie gesagt soll das hier nur
ein kleines funktionierendes Beispiel sein.
Danke, so hätte ich es eigentlich auch gelöst, das Problem ist bloß, dass ich bei dem Code den ich über Netbeans erstellt bekomme nie weiß, wie ich diesen so bearbeiten kann, da dort im änderbaren Code kein JFrame so erstellt wird wie du es beschrieben hast

Aber ich habe eine Möglichkeit gefunden einen "globalen" Keylistener zu benutzten, danke an alle
Chicken17 is offline  
Old 02/25/2014, 20:29   #8
 
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
Quote:
Originally Posted by Chicken17 View Post
Danke, so hätte ich es eigentlich auch gelöst, das Problem ist bloß, dass ich bei dem Code den ich über Netbeans erstellt bekomme nie weiß, wie ich diesen so bearbeiten kann, da dort im änderbaren Code kein JFrame so erstellt wird wie du es beschrieben hast

Aber ich habe eine Möglichkeit gefunden einen "globalen" Keylistener zu benutzten, danke an alle
Alle GUI-Objekte werden von NetBeans aber als Attribute angelegt. Im Konstruktor nach initComponents() kannst du dann noch deinen eigenen Code hinzufügen.
dowhile is offline  
Old 02/25/2014, 23:29   #9
 
Chicken17's Avatar
 
elite*gold: 7
Join Date: May 2009
Posts: 6,910
Received Thanks: 4,497
Quote:
Originally Posted by dowhile View Post
Alle GUI-Objekte werden von NetBeans aber als Attribute angelegt. Im Konstruktor nach initComponents() kannst du dann noch deinen eigenen Code hinzufügen.
Und wie würde ich da zum Beispiel dem kompletten Frame einen KeyListener hinzufügen? Müsste man das im Konstruktor machen oder in den initComponents (geht ja indem man bei einem Objekt custom code oder so wählt und mit pre init kann man da ja dann neue Sachen hinzufügen die quasi für alles gelten können und nicht bloß für das eine Objekt, das man gewählt hat)?
Chicken17 is offline  
Old 02/26/2014, 16:52   #10
 
.SkyneT.'s Avatar
 
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
Quote:
Originally Posted by Chicken17 View Post
Und wie würde ich da zum Beispiel dem kompletten Frame einen KeyListener hinzufügen? Müsste man das im Konstruktor machen oder in den initComponents (geht ja indem man bei einem Objekt custom code oder so wählt und mit pre init kann man da ja dann neue Sachen hinzufügen die quasi für alles gelten können und nicht bloß für das eine Objekt, das man gewählt hat)?
Ein eigener KeyEventDispatcher sollte genügen.
Code:
public class MyFrame extends javax.swing.JFrame
{
   //[...]
    private class MyDispatcher implements KeyEventDispatcher
    {
        @Override
        public boolean dispatchKeyEvent(KeyEvent e)
        {
            if (e.getID() == KeyEvent.KEY_PRESSED) 
            {
                System.out.println(e.getKeyChar()+" pressed");
            } 
            else if (e.getID() == KeyEvent.KEY_RELEASED) 
            {
                System.out.println(e.getKeyChar()+" released");
            } 
            else if (e.getID() == KeyEvent.KEY_TYPED) 
            {
                System.out.println(e.getKeyChar()+" typed");
            }
            return false;
        }
    }

    public MyFrame()
    {
        initComponents();
        KeyboardFocusManager.getCurrentKeyboardFocusManager()
                            .addKeyEventDispatcher(new MyDispatcher());
    }
   //[...]
}
.SkyneT. is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
[JAVA Error] Could not create the java virtual machine
07/21/2013 - Technical Support - 10 Replies
Schönen Abend! Leider hat es sich aus einem unerfindlichen Grund ergeben, dass sobald ich die Minecraft.exe starten will die Errormeldung kommt. Die Tips auf Minecraft.net habe ich schon ohne Erfolg befolgt. Hoffe ihr könnt mir weiterhelfen... Mein PC:
recompile Problem (Block.java, item.java)
04/13/2013 - Minecraft - 1 Replies
Guten Morgen liebe Com (: Ich versuche etwas neues in Minecraft.. für mich einzubauen.. neuer Block + das Item dazu, des eingepflanzt werden muss.. wie bei einer Karotte oder einer Kartoffel. Ich zeige euch den Inhalt meiner BlockOnion.java package net.minecraft.src;
Java JFrame
02/05/2013 - General Coding - 2 Replies
hi hab mal ne frage muss das hier erstellen aber hab probleme also mein ansatz ist: import javax.swing.JFrame; public class JFrame { public static void main (String args) { JFrame jf = new JFrame(); jf.setVisible(true); jf.setSize(720, 640); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



All times are GMT +1. The time now is 23:37.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.