Zdarzenie klawiatury i myszy.

0

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;
    
   
    
}

0
    public ImageComponent()
    {
        try
        {            
            img=ImageIO.read(new File("spring.jpeg"));
            addMouseMotionListener(new MouseHandler()); 			
            addKeyListener(new KeyMoving());
 
        }
        catch(IOException ex)
        {
            System.out.println("Blad");
        }
	setFocusable(true);
    }
0

A co robi dokładnie ta funkcja?

0

Zdarzenia klawiaturowe trafiają do tego komponentu, który ma akurat fokus. Domyślnie nie wszystkie komponenty mogą mieć fokus. Zapewne i tak będzie trzeba wpierw kliknięciem myszy przenieść fokus na ten komponent, ewentualnie możesz wywołać metodę requestFocus().

0

Dzięki.

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