Pełen ekran-problem z KeyListenerem

0

Witam.
Zaczynam sie uczyc pisać aplikacje pełnoekranowe. Czy moze mi ktoś powiedzieć dlaczego nie "widzi" wciskania klawiszy?

import java.awt.EventQueue;
 
public class Main {
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
 
            @Override
            public void run() {
                new Frame();
            }
        });
    }
 
}
import java.awt.DisplayMode;
import java.awt.Graphics2D;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Window;
import java.awt.image.BufferStrategy;
 
import javax.swing.JFrame;
 
 
public class Screen  {
 
    private GraphicsDevice device;
 
    public Screen()
    {
        GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
        device = environment.getDefaultScreenDevice();
    }
 
 
    public void setFullSceen(DisplayMode displayMode, JFrame window)
    {
        window.setUndecorated(true);
        window.setResizable(false);
 
        device.setFullScreenWindow(window);
 
        if(displayMode != null && device.isDisplayChangeSupported())
        {
            try
            {
                device.setDisplayMode(displayMode);
            }
            catch (IllegalArgumentException e) {
            }
 
        }
    }
    public void restoreScreen()
    {
        Window window = device.getFullScreenWindow();
        if(window != null){
            window.dispose();
        }
        device.setFullScreenWindow(null);
    }
 
}
import java.awt.Color;
import java.awt.DisplayMode;
import java.awt.Font;
import java.awt.Graphics2D;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
 
 
public class Frame extends JFrame {
 
    DisplayMode displayMode;
    public Frame()
    {
        displayMode = new DisplayMode(1024, 768, 32, 100);
        run(displayMode);
    }
 
    public void run(DisplayMode displayMode)
    {
 
        JPanel panel = new Panel();
        add(panel);
 
        Screen screen = new Screen();
        try 
        {
 
            screen.setFullSceen(displayMode, this);
        }catch (Exception e) {
            // TODO: handle exception
        }
        }
 
 
}
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
 
import javax.swing.JPanel;
 
 
public class Panel extends JPanel
{
 
    private int x;
    private int y;
    private int key;
 
    public Panel()
    {
        create();
    }
 
    private void create(){
        MyKeyListener listener = new MyKeyListener(this);
        addMouseListener(listener);
        addMouseMotionListener(listener);
        addKeyListener(listener);
        repaint();
    }
 
    @Override
    public void paintComponent(Graphics g){
        g.setColor(Color.yellow);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(Color.red);
        g.setFont(new Font("Arial", Font.BOLD, 20));
        g.drawString("X: "+x, 100, 100);
        g.drawString("Y: "+y, 100, 130);
        g.drawString("Key: "+key, 100, 160);
    }
 
    public void setPoz(int x,int y ){
        this.x=x;
        this.y=y;
        repaint();
    }
 
    public void setKey(int k){
        key=k;
        repaint();
    }
}
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
 
 
public class MyKeyListener implements MouseListener,MouseMotionListener,KeyListener{
 
    Panel panel;
 
    public MyKeyListener(Panel p){
        panel=p;
    }
 
 
    @Override
    public void mouseClicked(MouseEvent e) {
        System.exit(0);
    }
 
    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
 
    }
 
    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
 
    }
 
    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
 
    }
 
    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
 
    }
 
 
    @Override
    public void mouseDragged(MouseEvent e) {
        // TODO Auto-generated method stub
 
    }
 
 
    @Override
    public void mouseMoved(MouseEvent e) {
        panel.setPoz(e.getX(),e.getY());
        // TODO Auto-generated method stub
 
    }
 
 
    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println("a"+e.getKeyChar());
    }
 
 
    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub
 
    }
 
 
    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
 
    }
 
}
0

Pomysły by ignorować błędy

catch(Exception e){
}

oraz nadawać swoim klasom (Frame i Panel) nazwy takie jak mają standardowe klasy Javy są raczej głupie.
Żeby komponent reagował na klawiaturę musi mieć fokus, na JPanel domyślnie fokus się nie przenosi.

    public Panel()
    {
        setFocusable(true);
        create();
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1