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.
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
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.
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
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.
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)?
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());
}
//[...]
}
[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);