import java.awt.*;
import javax.swing.*;
public class MyPanel extends JPanel{
RectClass rectClass = null;
public MyPanel(){
rectClass = RectClass.returnRectClass();
}
public void paint(Graphics g){
super.paint(g);
this.drawRect(rectClass.getX(), rectClass.getY(), rectClass.getWidth(), rectClass.getHeight(), g);
}
public void drawRect(int x1, int y1, int x2, int y2,Graphics g){
g.fillRect(x1, y1, x2, y2);
this.repaint();
}
//创建MyPanel对象,return函数方便其他函数调用。
private static MyPanel mypanel = new MyPanel();
public static MyPanel returnMyPanel(){
return mypanel;
}
}
import java.awt.Cursor;
import java.awt.event.*;
public class MouseListenerClass implements MouseListener{
MyPanel mypanel = null;
RectClass rectClass = null;
private int mousePressX = 0;
private int mousePressY = 0;
public MouseListenerClass(){
mypanel = MyPanel.returnMyPanel();
rectClass = RectClass.returnRectClass();
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("鼠标按下:x = "+arg0.getX() + " y = "+arg0.getY());
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("鼠标进入");
mypanel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR ));
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("鼠标出来");
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("鼠标按下");
mousePressX = arg0.getX();
mousePressY = arg0.getY();
rectClass.setX(mousePressX);
rectClass.setY(mousePressY);
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
System.out.println("鼠标松开");
rectClass.setWidth(arg0.getX()-mousePressX);
rectClass.setHeight(arg0.getY()-mousePressY);
}
}
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class KeyListenerClass implements KeyListener{
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
System.out.println("按键按下");
System.out.println("按下的是:"+arg0.getKeyChar());
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
System.out.println("按键松开");
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
System.out.println("");
}
}
import java.awt.event.*;
public class WindowsListenerClass implements WindowListener{
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("调用WindowActivate方法");
}
@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("调用windowClosed方法");
}
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("调用windowClosing方法");
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("调用windowDeactivated方法");
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("调用windowDeiconified方法");
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("调用windowIconified方法");
}
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
System.out.println("调用windowOpened方法");
}
}
public class RectClass {
private int x = 0;
private int y = 0;
private int width = 0;
private int height = 0;
private static RectClass rectClass = new RectClass();
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public static RectClass returnRectClass(){
return rectClass;
}
}
import javax.swing.*;
public class MyTest01 extends JFrame{
MyPanel mypanel = null;
MouseListenerClass mouseListenerClass = null;
KeyListenerClass keyListenerClass = null;
WindowsListenerClass windowsListenerClass = null;
public static void main(String[] args){
MyTest01 mytest01 = new MyTest01();
}
public MyTest01(){
mypanel = MyPanel.returnMyPanel();
keyListenerClass = new KeyListenerClass();
mouseListenerClass = new MouseListenerClass();
windowsListenerClass = new WindowsListenerClass();
this.add(mypanel);
this.addKeyListener(keyListenerClass);
this.addMouseListener(mouseListenerClass);
this.addWindowListener(windowsListenerClass);
this.setSize(400,300);
this.setLocation(400,400);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
在学习的过程中,自己首先实现了在面板上添加各个监听事件,对各个事件的用法有了一个大概的了解。然后让鼠标进入面板区域后变为小手,接着通过利用keyListener事件实现拖拽绘画矩形,就是虽然画出来了,但是不对准确的在指定位置绘画。在学习过程中,自己明白了如何在不同类中调用同一个对象,对静态方法返回类的对象和静态类变量有了一个更深刻的了解,我觉得这是我收获最大的。