Обработка событий мыши на Java SE
public class lab10
{
JFrame form;
pictureBox pc;
int OldX,OldY,MouseX,MouseY,Regim;
lab10()
{
Regim=0;
......
class pictureBox extends JPanel // наследникот JPanel
implements MouseListener, // использованиепрослушиваниямыши
MouseMotionListener // использованиепрослушивания движения мыши
.........................
public pictureBox ()
{
addMouseListener(this); // подключениепрослушиваниямыши
.........................
public void paintComponent(Graphics g) // рисование
{
....
}
Перегрузить все события!
public void mousePressed(MouseEvent me)
{
if(me.getButton==1) // левая кнопка
{
OldX=me.getX();
OldY=me.getY();
MouseX=OldX;
MouseY=OldY;
Regim=1;
}
}
public void mouseClicked(MouseEvent me)
{
}
public void mouseEntered(MouseEvent me)
{
}
public void mouseExited(MouseEvent me)
{
}
public void mouseReleased(MouseEvent me)
{
if(Regim==1)
{
MouseX=me.getX();
MouseY=me.getY();
Regim=0;
}
}
public void mouseMoved(MouseEvent me) // безнажатиякнопки
{
}
public void mouseDragged(MouseEvent me)
{
if(Regim==1)
{
MouseX=me.getX();
MouseY=me.getY();
}
}
public class lab10 extends MIDlet
{
int Regim;
int OldX,OldY,MouseX,MouseY;
....
public void startApp()
{
Regim=0;
......
protected void paint(Graphics g)
{
...
}
public void pointerPressed (int x, int y)
{
OldX=x;
OldY=y;
MouseX=OldX;
MouseY=OldY;
Regim=1;
}
public void pointerReleased (int x, int y)
{
MouseX=x;
MouseY=y;
|
|
Regim=0;
}
public void PointerDragged (int x, int y)
{
MouseX=x;
MouseY=y;
}
6) Преобразование фрагмента изображения
по отдельным точкам
Пример задачи. После отпускания кнопки мыши, в данной точке
рисуется красный прямоугольник 10x14 точек. Для этого
вызывается метод AddRis.
На visual C++
public ref class Form1: public System::Windows::Forms::Form
{
public:
int Regim;
int MouseX,MouseY,OldX,OldY;
...................
void AddRis()
{
int x,y;
Color c; // цвет точки
int r,g,b;
Bitmap^ bmp = gcnew Bitmap(1,1); // временная битовая карта
bmp=(Bitmap^)pictureBox1->Image; // точки pictureBox
x=MouseX;
while(x<MouseX+10)
{
y=MouseY;
while(y<MouseY+14)
{
c=bmp->GetPixel(x,y); // получение цветов точки
r=c.R;
g=c.G;
b=c.B;
c=Color::FromArgb(255,0,0); // новые цвета RGB
bmp->SetPixel(x,y,c);
y++;
}
x++;
}
pictureBox1->Image = bmp; // закрепление к pictureBox
}
void Work()
{
Regim=0;
.....
на Java SE:
.....
int OldX,OldY,MouseX,MouseY,Regim;
int Type;
lab10()
{
Regim=0;
Type=0;
....
public void AddRis()
{
Type=1; // дорисовать
repaint();
}
public void paintComponent(Graphics g) // рисование
{
........
int x,y;
Color c;
int cold;
c=new Color(255,0,0);
if(Type==1)
{
g.setColor(c);
x=MouseX;
while(x<MouseX+10)
{
y=MouseY;
while(y<MouseY+14)
{
cold=im1.getRGB(x,y);
int red = (cold >> 16) & 0x000000FF;
int green = (cold >>8) & 0x000000FF;
int blue = (cold) & 0x000000FF;
g.drawLine(x, y, x, y);
y++;
}
x++;
}
}
Type=0;
// repaint(); убрать!!
}
public void mousePressed(MouseEvent me)
{
OldX=me.getX();
OldY=me.getY();
MouseX=OldX;
MouseY=OldY;
Regim=1;
}
public void mouseClicked(MouseEvent me)
{
}
public void mouseEntered(MouseEvent me)
{
}
public void mouseExited(MouseEvent me)
{
}
public void mouseReleased(MouseEvent me)
{
if(Regim==1)
{
MouseX=me.getX();
MouseY=me.getY();
Regim=0;
AddRis();
}
}
public void mouseMoved(MouseEvent me) // безнажатиякнопки
{
}
public void mouseDragged(MouseEvent me)
{
if(Regim==1)
{
MouseX=me.getX();
MouseY=me.getY();
}
}
на Java ME:
public class lab10 extends MIDlet
{
int Regim;
int OldX,OldY,MouseX,MouseY;
int Type;
...
g.drawImage(im1, 10, 20, Graphics.LEFT | Graphics.TOP);
int x,y;
int rr,gg,bb;
if(Type==1)
{
g.getRedComponent();
g.getGreenComponent();
|
|
g.getBlueComponent();
g.setColor(255,0,0);
x=MouseX;
while(x<MouseX+10)
{
y=MouseY;
while(y<MouseY+14)
{
g.drawLine(x, y, x, y);
y++;
}
x++;
}
}
...
public void pointerPressed (int x, int y)
{
OldX=x;
OldY=y;
MouseX=OldX;
MouseY=OldY;
Regim=1;
}
public void pointerReleased (int x, int y)
{
MouseX=x;
MouseY=y;
Regim=0;
Type=1;
repaint();
}
public void PointerDragged (int x, int y)
{
if(Regim==1)
{
MouseX=x;
MouseY=y;
}
}