C
Curryhuhn
Gast
Hallo Leute!
Ich probiere gerade etwas mit ActionEvents herum. Doch leider komme ich innerhalb eines JPanel nicht an die KeyEvents. Auf Tastendruck muessten eigentlich Nachrichten in der Konsole erscheinen. Ich denke, es liegt an dem nicht vorhandenen Fokus für das JPanel. Doch wie kann ich diesem den Fokus zuweisen?
Über eure Hilfe würde ich mich sehr freuen!
Ich probiere gerade etwas mit ActionEvents herum. Doch leider komme ich innerhalb eines JPanel nicht an die KeyEvents. Auf Tastendruck muessten eigentlich Nachrichten in der Konsole erscheinen. Ich denke, es liegt an dem nicht vorhandenen Fokus für das JPanel. Doch wie kann ich diesem den Fokus zuweisen?
Über eure Hilfe würde ich mich sehr freuen!
Code:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class KeyDemo {
private static void createAndShowGUI() {
System.out.println("Created GUI on EDT? " + SwingUtilities.isEventDispatchThread());
JFrame f = new JFrame("KeyDemo");
System.out.println("Focus (JFrame) ? -> " + f.isFocusOwner());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new MyPanel());
f.pack();
f.setVisible(true);
}
public static void main(String[] args) {
// Wird erst ausgefuehrt, wenn alle anderen Aufgaben abgearbeitet wurden und generiert das GUI als
// Event Dispatch Thread (EDT)
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
class MyPanel extends JPanel {
public MyPanel() {
setBorder(BorderFactory.createLineBorder(Color.black));
// Der Fokus zeigt an, welches Fenster die Tastatureingabe erhält.
requestFocus();
System.out.println("Focus (JPanel)? -> " + isFocusOwner());
System.out.println("Focusable (JPanel)? -> " + isFocusable());
System.out.println("requestFocusInWindow (JPanel)? -> " + requestFocusInWindow());
// Listener: Mouse
addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
System.out.println("Maus wurde gedrueck!");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("Maus ist da!");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("Maus ist weg!");
}
});
// Listener: Key
addKeyListener(new KeyListener() {
// Zeichen- und Funktionstaste gedrueckt
public void keyPressed(KeyEvent e) {
System.out.println("hier -> 1");
}
// Zeichen- und Funktionstaste losgelassen
public void keyReleased(KeyEvent e) {
System.out.println("hier -> 2");
}
// Zeichentaste gedrueckt
public void keyTyped(KeyEvent e) {
System.out.println("hier -> 3");
System.out.println("key char = " + e.getKeyChar());
System.out.println("key code = " + e.getKeyCode());
}
});
// Listener: Focus
addFocusListener(new FocusListener() {
public void focusGained(FocusEvent e) {
System.out.println("JPanel hat den Fokus bekommen");
}
public void focusLost(FocusEvent e) {
System.out.println("JPanel hat den Fokus verloren");
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
}