十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
this.addMouseListener(new
创新互联建站服务项目包括烟台网站建设、烟台网站制作、烟台网页制作以及烟台网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,烟台网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到烟台省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
MouseAdapter()
{
@Override
public
void
mousePressed(MouseEvent
e)
{
x
=
e.getX();
y
=
e.getY();
System.out.println("Xbefore:"+e.getX());
}
});
this.addMouseMotionListener(new
MouseMotionListener()
{
public
void
mouseDragged(MouseEvent
e)
{
JButton
btn
=
(JButton)
e.getSource();
setLocation(btn.getX()
+
e.getX()
-
x,
btn.getY()
+
e.getY()
-
y);
}
public
void
mouseMoved(MouseEvent
e)
{
}
});
上面的代码是给JButton添加的鼠标事件,移动的是按钮。。。
你这样不行啊,一闪一闪的根本看不到显示效果或者更本没有显示,绘图的方法要写在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();
}
}
楼主提问的水平很高啊,题目的要求都没有,如何回答。。。
相关类都在
import java.awt.*;
import javax.swing.* ;
动作事件相关类在import java.awt.event.*;中,在代码头import就可以看了
给一个相关的代码吧,包括所有的鼠标事件。
下面代码包括
按下,释放,进入区域,离开区域,点击 这5个事件
鼠标的相关事件会在窗口上方的文本区显示。。。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class TestMouseEvent extends JFrame implements MouseListener{
JPanel jp = new JPanel();
JTextField jtf = new JTextField();
public TestMouseEvent(){
setTitle("Mouse Event");
getContentPane().add(jtf,BorderLayout.NORTH);
getContentPane().add(jp,BorderLayout.CENTER);
jp.addMouseListener(this);
}
public static void main(String[] args){
TestMouseEvent frame = new TestMouseEvent();
frame.setSize(200,200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void mousePressed(MouseEvent e){
int x = e.getX();
int y = e.getY();
String s = "鼠标在坐标"+"("+x+","+y+")"+"出按下";
jtf.setText(s);
}
public void mouseReleased(MouseEvent e){
int x = e.getX();
int y = e.getY();
String s = "鼠标在坐标"+"("+x+","+y+")"+"出释放";
jtf.setText(s);
}
public void mouseClicked(MouseEvent e){
int x = e.getX();
int y = e.getY();
String s = "鼠标在坐标"+"("+x+","+y+")"+"出点击";
jtf.setText(s);
}
public void mouseEntered(MouseEvent e){
int x = e.getX();
int y = e.getY();
String s = "鼠标在坐标"+"("+x+","+y+")"+"出进入";
jtf.setText(s);
}
public void mouseExited(MouseEvent e){
int x = e.getX();
int y = e.getY();
String s = "鼠标在坐标"+"("+x+","+y+")"+"出离开";
jtf.setText(s);
}
}
使用组件的paint函数用于绘图, 使用MouseListener来响应鼠标的点击
效果图
代码
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.*;
import javax.swing.*;
public class DemoWin extends JFrame {
public DemoWin() {
MyPanel mp = new MyPanel();
mp.addMouseListener(mp);
add(mp);
// 窗口属性设置
setTitle("Demo");// 标题
setSize(300, 280);// 窗口大小
setLocationRelativeTo(null);// 窗口居中
setDefaultCloseOperation(EXIT_ON_CLOSE);// 窗口点击关闭时,退出程序
}
public static void main(String[] args) {
DemoWin win = new DemoWin(); // 创建窗口
win.setVisible(true);// 显示窗口
}
class MyPanel extends JPanel implements MouseListener {
int times;// 记录点击的次数
int x;// 记录鼠标X轴的位置
int y;// 记录鼠标Y轴的位置
@Override
public void paint(Graphics g) {
super.paint(g);
if (times == 0) {
g.setColor(Color.BLUE);// 颜色
g.fillOval(150, 150, 50, 50);// 150,150代表位置 50,50代表宽高
} else if (times == 1) {
g.setColor(Color.RED);
g.fillRect(150, 150, 50, 50);
} else {
g.setColor(Color.RED);
g.fillRect(x, y, 50, 50);
}
repaint();
}
public void mouseClicked(MouseEvent e) {
// if (e.getButton()==MouseEvent.BUTTON1) {//单击左键时有效..
// times++;// 记录点击的次数
// x = e.getX();
// y = e.getY();
// }
}
public void mousePressed(MouseEvent e) {// 鼠标按下就有效
times++;// 记录点击的次数
x = e.getX();
y = e.getY();
}
public void mouseReleased(MouseEvent e) {// 鼠标释放
}
public void mouseEntered(MouseEvent e) {// 鼠标移入
}
public void mouseExited(MouseEvent e) {// 鼠标移出
}
}
}
java鼠标点击事件的方法如下:
span style="font-family:Verdana;"事件源/span.addMouseListener(new MouseAdapter() {//建立事件处理机制
@Override
public void mouseClicked(MouseEvent e) {
if(e.getButton()==e.BUTTON1){//点击鼠标左键
int x=e.getX();
int y=e.getY();
String str="您点击的是左键,鼠标当前点击位置的坐标是(" + x + "," + y+")";
label.setText(str);
}else if(e.getButton()==e.BUTTON2){//点击鼠标滑轮
int x=e.getX();
int y=e.getY();
String str="您点击的是滑轮,鼠标当前点击位置的坐标是(" + x + "," + y+")";
label.setText(str);
}
else if(e.getButton()==e.BUTTON3){//点击鼠标右键
int x=e.getX();
int y=e.getY();
String str="您点击的是右键,鼠标当前点击位置的坐标是(" + x + "," + y+")";
label.setText(str);
}
}
});
e.getButton()返回值分别为NOBUTTON、BUTTON1、BUTTON2、BUTTON3,分别代表着无点击、左击、中间键、右击三种情况。
给Java初学者的建议:
1,不一定要把java学深入。有多少人搞程序是喜欢这个的,搞程序一半是因为钱多,一半是因为晋升公平。
2,初学者学java至少要脱产半年的时间才能算了解了,才适合被人带,因为至少半年的时间,才知道遇到问题如何解决,有的人需要更长的时间。现在有很多人已经有5年左右的经验了,在他们的压制下,java初学者很难有逆袭的机会了。
3,行业环境,现在数据存储,后台打包的方案的创业公司已经有苗头,也就是说,后台开发已经被集中解决,日后会越来越成熟,这就是意味着,java招聘需要有经验的人,也就是说,必须熬几年后才能有突破。
4,java离市场较远,所以呢?java开发人员很难有一个大的突破。
5,程序里面有变量所以解决了一系列类似的问题,所以注定了程序必须提供大批服务时才能有高收益。