关于Java中鼠标事件处理的问题,我的代码

packagecolin;importjava.awt.*;importjavax.swing.*;classframeextendsJFrame{frame(){JFr... package colin;

import java.awt.*;
import javax.swing.*;

class frame extends JFrame{

frame(){
JFrame f = new JFrame();
f.addMouseListener(new Mouseevent());
f.setSize(500,600);
f.setVisible(true);
}
public static void main(String args[]){
new frame();
}
}

package colin;

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

public class Mouseevent implements MouseListener{
public void mousePressed(MouseEvent e){

}
public void mouseReleased(MouseEvent e){

}
public void mouseEntered(MouseEvent e){

}
public void mouseExited(MouseEvent e){

}
public void mouseClicked(MouseEvent e){
int x = e.getX();
int y = e.getY();
Graphics g = new JFrame().getGraphics();
g.drawLine(0,0,x,y);
}
}
展开
 我来答
隔壁老王叨叨叨
2011-06-18 · TA获得超过7699个赞
知道大有可为答主
回答量:2710
采纳率:0%
帮助的人:2521万
展开全部
你这样不行啊,一闪一闪的根本看不到显示效果或者更本没有显示,绘图的方法要写在paintComponent(Graphics g)里面才能长久保存。

我知道你想在mouseClicked里面做什么,但是在这里进行绘图,repaint没有立即被执行,所以有可能没有任何显示;如果repaint执行了,也很有可能立刻被后面的绘图所覆盖。最好的办法是在这里出发一个标志,然后调用repaint函数,在paintComponent函数中对这个标志进行绘制,决定到底该怎么画。

手写了一段代码,没有编译,你可以参考一下:

package colin;

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

public class JXFrame extends JFrame
{
boolean mouseCliked = false;
int x,y;

public void paintComponent(Graphics g)
{
if(mouseCliked )
{
g.setColor(255,255,0);//必须有这一步,否则画笔颜色为默认背景色,是根本看不出任何线条效果的。
g.drawLine(0,0,x,y);
}
}

public void setPoint(int x,int y)
{
this.x = x;
this.y = y;
}

}

package colin;

import java.awt.*;
import javax.swing.*;

class frame{

frame(){
JXFrame f = new JXFrame();
f.addMouseListener(new Mouseevent(f));
f.setSize(500,600);
f.setVisible(true);
}
public static void main(String args[]){
new frame();
}
}

package colin;

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

public class Mouseevent implements MouseListener{
JXFrame parent;
public Mouseevnt(JXFrame parent){
this.parent = parent;
}
public void mousePressed(MouseEvent e){

}
public void mouseReleased(MouseEvent e){
this.parent.mouseCliked = false;
}
public void mouseEntered(MouseEvent e){
this.parent.mouseCliked = false;
}
public void mouseExited(MouseEvent e){
this.parent.mouseCliked = false;
}
public void mouseClicked(MouseEvent e){
this.parent.setPoint(e.getX(),e.getY());
this.parent.mouseCliked = true;
this.parent.repaint();
}
}
dmeigcv
2011-06-19 · TA获得超过1804个赞
知道小有建树答主
回答量:1761
采纳率:0%
帮助的人:272万
展开全部
肯定是位运算符,为什么API里说可以把控制键使用位运算符来操作的原因,我给你作个例子,你就会明白了。
在JAVA中控制键(就是ctrl, alt等,当然你这里的这个也是这个范围内的)是用某一个字节中的位来表示的,我们假设在java使用一个字节(8位)来表过这些控制键。比如这一个字节的第1位表示ctrl,第2位表示alt...最后一位表示BUTTON3_DOWN_MASK,那么当按下ctrl第1位会被置于1,按下alt最后一位会被置于1,如果按下鼠标右见,则最后一位被置于1。因此常量BUTTON3_DOWN_MASK在这个字节中的表示就是0000 0001。如果是这样的话,我们来看你的if语句。

event.getModifiersEx()&InputEvent.BUTTON3_DOWN_MASK ,这样就很明白了。如果你按下了ctrl,也就是把这个字节的第1位置1,也就是1000 0000然后把这个数拿来与0000 0001按位与,结果为0,表示没按下鼠标右见。因此只有当你按下鼠标右见时表达式才为真,也就是才为1。整个表达式也就是(event.getModifiersEx()&InputEvent.BUTTON3_DOWN_MASK)!=0没有按下鼠标右见时,条件为真。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1244a95b1
2011-06-18
知道答主
回答量:37
采纳率:0%
帮助的人:10.5万
展开全部
package colin;

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.*;

public class frame extends JFrame{
//构造方法
frame(){
this.addMouseListener(new Mouseevent(this));
this.setSize(500,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭时程序退出
this.setVisible(true);
}
public static void main(String args[]){
new frame();
}
}

class Mouseevent implements MouseListener{
frame f;
//构造方法,持有窗口对象的引用
Mouseevent(frame f){
this.f= f;
}
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
Graphics g = f.getGraphics();
Color c = g.getColor();//取出画笔颜色
g.setColor(Color.RED);//设置画笔颜色
g.drawLine(0,0,x,y);
g.setColor(c);//恢复画笔颜色

}
public void mouseEntered(MouseEvent e) {

}
public void mouseExited(MouseEvent e) {

}
public void mousePressed(MouseEvent e) {

}
public void mouseReleased(MouseEvent e) {

}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yehui186
2011-06-18
知道答主
回答量:22
采纳率:0%
帮助的人:10.4万
展开全部
不会
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式