| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 591 人关注过本帖
标题:紧急!!!求解按钮随着鼠标的移动问题
只看楼主 加入收藏
gossipcher
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-8-15
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
紧急!!!求解按钮随着鼠标的移动问题
    我是java初学者,我想做一个小游戏,用鼠标控制按钮水平移动,接上面随机移动的小球。按鼠标事件,记住鼠标的坐标(x0,y0).鼠标拖动是,产生的坐标记作(x1,y1)     然后我给button的横坐标bx=bx+(x1-x0);x0=x1;
    然后这样下来,鼠标慢慢移动,按钮还能正常的移动,鼠标稍微一快,按钮就跳跃性的移动,甚至就移不见了
    请教一下各位高手!!那个button的横坐标应该怎么控制才正确呢?
搜索更多相关主题的帖子: button 鼠标 java 小游戏 
2011-08-15 23:03
gossipcher
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-8-15
收藏
得分:0 
怎么都没人尼。。。
2011-08-16 20:59
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:20 
程序代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MoveButton {
    private static int     xOnComponent, xOnScreen;
    private static JFrame  jFrame  = new JFrame("Test");
    private static JButton jButton = new JButton("button"); 

    public static void main(String[] args) {
        // 初始化按钮
        jButton.setSize(100, 25);
        jButton.setLocation(
            (500 - jButton.getWidth())  / 2,
            (300 - jButton.getHeight()) / 2);
       
        // 初始化窗口
        jFrame.setLayout(null);
        jFrame.setSize(500, 300);
        jFrame.setLocation(
            (Toolkit.getDefaultToolkit().getScreenSize().width  - jFrame.getWidth())  / 2,
            (Toolkit.getDefaultToolkit().getScreenSize().height - jFrame.getHeight()) / 2);
        jFrame.setVisible(true);
        jFrame.add(jButton);
       
        // 为按钮添加MouseListener
        jButton.addMouseListener(new MouseListener() {
            public void mousePressed(MouseEvent e) {
                xOnComponent = jButton.getX();
                xOnScreen = e.getXOnScreen();
            }
           
            public void mouseClicked(MouseEvent e) {}
           
            public void mouseEntered(MouseEvent e) {}
           
            public void mouseExited(MouseEvent e) {}
           
            public void mouseReleased(MouseEvent e) {}
        });
       
        // 为按钮添加MouseMotionListener
        jButton.addMouseMotionListener(new MouseMotionListener() {
            public void mouseDragged(MouseEvent e) {
                int xTmp1 = xOnComponent;
                int xTmp2 = e.getXOnScreen();
                xTmp1 += xTmp2 - xOnScreen;
                if(xTmp1 > -1 && xTmp1 < 500 - jButton.getWidth()) {
                    xOnComponent = xTmp1;
                    xOnScreen    = xTmp2;
                    jButton.setLocation(xTmp1, jButton.getY());
                }
            }
           
            public void mouseMoved(MouseEvent e) {}
        });
    }
}
因为只需要水平移动,所以不需要考虑y。

[ 本帖最后由 lz1091914999 于 2011-8-17 09:08 编辑 ]

My life is brilliant
2011-08-17 09:03
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MoveButton {
    private static int         xOnFrame, xOnScreen;
    private static JFrame    jFrame     = new JFrame("Test");
    private static JButton    jButton = new JButton("button");
    public static void main(String[] args) {
        // 初始化按钮
        jButton.setSize(100, 25);
        jButton.setLocation(
            (500 - jButton.getWidth())  / 2,
            (300 - jButton.getHeight()) / 2);
       
        // 初始化窗口
        jFrame.setLayout(null);
        jFrame.setSize(500, 300);
        jFrame.setLocation(
            (Toolkit.getDefaultToolkit().getScreenSize().width  - jFrame.getWidth())  / 2,
            (Toolkit.getDefaultToolkit().getScreenSize().height - jFrame.getHeight()) / 2);
        jFrame.setVisible(true);
        jFrame.add(jButton);
        jFrame.setDefaultCloseOperation(jFrame.EXIT_ON_CLOSE);
       
        // 为按钮添加MouseListener
        jButton.addMouseListener(new MouseListener() {
            public void mousePressed(MouseEvent e) {
                xOnFrame  = jButton.getX();
                xOnScreen = e.getXOnScreen();
            }
           
            public void mouseClicked(MouseEvent e) {}
           
            public void mouseEntered(MouseEvent e) {}
           
            public void mouseExited(MouseEvent e) {}
           
            public void mouseReleased(MouseEvent e) {}
        });
       
        // 为按钮添加MouseMotionListener
        jButton.addMouseMotionListener(new MouseMotionListener() {
            public void mouseDragged(MouseEvent e) {
                int x1 = xOnFrame;
                int x2 = e.getXOnScreen();
               
                x1 += x2 - xOnScreen;
                if(x1 < 0) {
                    xOnFrame = 0;
                    xOnScreen = max(
                        min(jFrame.getX() + jButton.getWidth() - 1, xOnScreen), jFrame.getX());
                } else if(x1 >= jFrame.getWidth() - jButton.getWidth()) {
                    xOnFrame = jFrame.getWidth() - jButton.getWidth() - 1;
                    xOnScreen = min(
                        max(jButton.getX() + jFrame.getX() + 1, xOnScreen),
                        jButton.getX() + jFrame.getX() + jButton.getWidth() - 1);
                } else {
                    xOnFrame  = x1;
                    xOnScreen = x2;
                }
                jButton.setLocation(xOnFrame, jButton.getY());
            }
           
            public void mouseMoved(MouseEvent e) {}
        });
    }
   
    public static int max(int a, int b) {
        return a > b ? a : b;
    }
   
    public static int min(int a, int b) {
        return a < b ? a : b;
    }
}

这个又要好一点。

My life is brilliant
2011-08-17 11:39
快速回复:紧急!!!求解按钮随着鼠标的移动问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021679 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved