Witam. Otóz problem jest nastepujacy. Moj program nie reaguje na zdarzenia z klawiatury. Z mysza wszystko dziala
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.imageio.ImageIO;
import java.io.*;
public class ImageMoving
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
@Override public void run()
{
ImageFrame frame=new ImageFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class ImageFrame extends JFrame
{
public ImageFrame()
{
setTitle("Image");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
setLocationByPlatform(true);
ImageComponent img=new ImageComponent();
add(img);
}
private int DEFAULT_WIDTH=800;
private int DEFAULT_HEIGHT=600;
}
class ImageComponent extends JComponent
{
//Pobieranie obrazka
public ImageComponent()
{
try
{
img=ImageIO.read(new File("spring.jpeg"));
addMouseMotionListener(new MouseHandler());
addKeyListener(new KeyMoving());
}
catch(IOException ex)
{
System.out.println("Blad");
}
}
//Rysowanie obrazka
@Override public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(img,DEFAULT_X,DEFAULT_Y,null);
}
private class MouseHandler implements MouseMotionListener
{
/**
* Wewnetrzna klasa odpowiedzialna za przesuwanie obrazka za pomoca myszki
*
*/
@Override public void mouseDragged(MouseEvent e)
{
Point2D p=e.getPoint();
int x=(int) p.getX();
int y=(int) p.getY();
if(PREVIOUS_X==0 && PREVIOUS_Y==0)
{
PREVIOUS_X=x;
PREVIOUS_Y=y;
}
int move_x = x-PREVIOUS_X;
int move_y = y-PREVIOUS_Y;
DEFAULT_X = DEFAULT_X+move_x;
DEFAULT_Y = DEFAULT_Y+move_y;
PREVIOUS_X = x;
PREVIOUS_Y = y;
repaint();
}
//Nie robi nic
@Override public void mouseMoved(MouseEvent e) {}
}
private class KeyMoving implements KeyListener
{
@Override public void keyTyped(KeyEvent e) {
}
@Override public void keyPressed(KeyEvent e)
{
int code=e.getKeyCode();
System.out.println(code);
}
@Override public void keyReleased(KeyEvent e)
{
}
}
private Image img;
private int DEFAULT_X=150;
private int DEFAULT_Y=150;
private int PREVIOUS_X=0;
private int PREVIOUS_Y=0;
private int SIZE=300;
}