
1) Обработка событий от мыши
Принцип делегирования – событие отправляется одному или нескольким слушателям. Слушатели включают прослушивание соответствующего события.
MouseListener имеет 5 методов, которые следует бработать.
Пример на SE для JPanel с изображениями:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Prog_5_1
{
JFrame form;
pictureBox pc; // панель для рисования
Prog_5_1()
{
form = new JFrame();
form.setSize (500,500);
form.setTitle ("лабораторная 5");
form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
form.setLayout(null);
pc=new pictureBox();
pc.setBounds(0, 0, 300, 300);
form.add(pc);
form.show();
}
public static void main (String args[])
{
Prog_5_1 f;
f= new Prog_5_1();
}
}
class pictureBox extends JPanel
Implements MouseListener // использование прослушивания мыши
{
int Regim;
Int mouseX,mouseY; // координаты мыши
public static BufferedImage im;
pictureBox ()
{
mouseX=0;
mouseY=0;
Regim=0;
addMouseListener(this); // подключение прослушивания мыши
try
{
im = ImageIO.read(new File("face1.jpg"));
}
catch (IOException e)
{
}
}
public void paintComponent(Graphics g)
{
Graphics2D g2 = im.createGraphics();
g.drawImage(im, 0, 0, null);
if(Regim==1) // после события от мыши!
{
Color c;
c=new Color(220,0,250);
g.setColor(c);
g.drawOval(mouseX,mouseY,40, 40);
}
repaint();
}
// 5 событий от мыши
public void mouseClicked(MouseEvent me)
{
}
public void mouseEntered(MouseEvent me)
{
}
public void mouseExited(MouseEvent me)
{
}
public void mousePressed(MouseEvent me)
{
}
public void mouseReleased(MouseEvent me)
{
mouseX=me.getX(); // координаты курсора мыши
mouseY=me.getY();
Regim=1;
repaint();
}
}
MouseMotionListener имеет 2 метода: mouseDragged (MouseEvent me) и
mouseMoved(MouseEvent me)
На ME:
pointer – мышь для мобильных устройств. Телефон должен быть touchscreen.
Canvas поддерживает pointer
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class Prog_5_1 extends MIDlet
{
private Display dsp;
private MyCanvas cv;
public Prog_5_1()
{
cv= new MyCanvas();
}
public void startApp()
{
dsp=Display.getDisplay(this);
dsp.setCurrent(cv);
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
class MyCanvas extends Canvas
{
Int Regim;
Int mouseX,mouseY; // координаты мыши
MyCanvas()
{
mouseX=0;
mouseY=0;
Regim=0;
}
protected void paint(Graphics g)
{
Image im = null;
try
{
im=Image.createImage("/Images/face1.jpg");
}
catch (Exception e)
{
}
g.drawImage(im, 10, 10, Graphics.LEFT | Graphics.TOP);
if(Regim==1) // после point дорисовать
{
g.setColor(100,50,200);
g.fillRect(mouseX, mouseY, 30, 40);
}
}
public void pointerPressed (int x, int y)
{
}
public void pointerReleased (int x, int y)
{
mouseX=x;
mouseY=y;
Regim=1;
repaint();
}
public void PointerDragged (int x, int y)
{
}
}
}
2)Обработка событий от клавиатуры
SE:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Prog_5_2
{
JFrame form;
pictureBox pc;
Prog_5_2()
{
form = new JFrame();
form.setSize (500,500);
form.setTitle ("лабораторная 5");
form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
form.setLayout(null);
pc=new pictureBox();
pc.setBounds(0, 0, 300, 300);
form.add(pc);
pc.setFocusable(true); // перехват клавиш когда в фокусе
form.show();
}
public static void main (String args[])
{
Prog_5_2 f;
f= new Prog_5_2();
}
}
class pictureBox extends JPanel