java 鼠标 图形_Java 鼠标事件 plus 图形

0818b9ca8b590ca3270a3433284dd417.png

上图是笔者应用Java鼠标事件的捕获,结合Java图形库功能做的一个简单的Painter程序,非常简单。“麻雀虽小,五脏俱全”,这个小程序应用了Java对用户操作的事件的捕获,又应用了Java二维图形功能。捕获事件和图形库有什么用处呢?用处非常大,因为结合这两种技术我们可以开发自己的“可见的,可操控的用户自定义对象”。

Java语言当前在软件工程领域的应用,主要是用于开发Management Information System,即开发管理信息系统。Java主要用于业务逻辑的操作,充当幕后英雄,是网络上的“活雷锋”,与用户交互的Graphical User Interface的工作由Html,javascript,Flash等完成。Java似乎永远都是后台剧务,抢风头、露脸面的机会轮不到Java。

其实不然,例如,我们要开发一个Work Flow平台,开发一个协同工作系统,需要给用户一个图形化的界面来定义工作流,需要定义工作流的节点,节点之间的流转关系,流转事件的触发条件等等,就需要给用户一个可以操控的图形化界面。如下图:

0818b9ca8b590ca3270a3433284dd417.png

Java语言的AWT包提供了事件的监听器功能,而且提供了Graphics2D图形包。想深入研究的朋友可以深入看一下AWT、Swing和Graphics2D方面的内容。我的Painter程序源码如下:

//

//    Description: Java Program to demonstrate capturing mouse event

//    author: WangQingda

//    date: 2009.05.19

//

import java.awt.event.MouseEvent;

import java.awt.event.MouseAdapter;

import java.awt.FlowLayout;

import javax.swing.JFrame;

import java.awt.Graphics2D;

public class DrageFrame extends javax.swing.JFrame

{

private int oldX=0;

private int oldY=0;

public DrageFrame() {

try {

jbInit();

} catch (Exception ex) {

ex.printStackTrace();

}

}

public static void main(String[] args)

{

//创建窗口对象

DrageFrame drageframe = new DrageFrame();

}

private void jbInit() throws Exception

{

this.addMouseListener(new DrageFrame_this_mouseAdapter(this));

this.getContentPane().setLayout(flowLayout1);

this.setSize(600,400);

this.setVisible(true);

this.setTitle("鼠标事件与图形演示:作者WangQingda");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public void this_mousePressed(MouseEvent e)

{

//鼠标按下

this.oldX=e.getX();

this.oldY=e.getY();

System.out.println("pressed :  "+e.getX()+" -- "+e.getY());

}

public void this_mouseReleased(MouseEvent e) {

//鼠标释放

int newX=e.getX();

int newY=e.getY();

System.out.println("released :  "+e.getX()+" -- "+e.getY());

Graphics2D pt=(Graphics2D)this.getGraphics();

pt.drawLine(this.oldX,this.oldY,newX,newY);

}

FlowLayout flowLayout1 = new FlowLayout();

}

class DrageFrame_this_mouseAdapter extends MouseAdapter {

private DrageFrame adaptee;

DrageFrame_this_mouseAdapter(DrageFrame adaptee) {

this.adaptee = adaptee;

}

public void mousePressed(MouseEvent e) {

adaptee.this_mousePressed(e);

}

public void mouseReleased(MouseEvent e) {

adaptee.this_mouseReleased(e);

}

}

一个实际应用中的用户自定义的可操控的图形对象程序的开发可能要比这复杂得多,要考虑图形对象的数据存储、数据结构、算法。图形的刷新,用户自定义对象的遮挡问题等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值