Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
绘制一个向鼠标点击点缓慢移动而不是跳转的矩形(JAVA)_Java_Swing_Graphics - Fatal编程技术网

绘制一个向鼠标点击点缓慢移动而不是跳转的矩形(JAVA)

绘制一个向鼠标点击点缓慢移动而不是跳转的矩形(JAVA),java,swing,graphics,Java,Swing,Graphics,我对JAVA非常陌生,我只是一个爱好者,最近我一直在学习一些关于制作UI和所有电子产品的教程来了解这一点,欢迎使用任何代码片段,但更重要的是,这个函数/过程叫什么,所以我可以从中更深入地了解swing的不同部分,这非常有用,我仍在努力完成这些组件 我目前还没有一个总体目标,我只是在寻找自己的立足点,但我想尝试制作一个自上而下的2d迷宫小游戏来学习 有一部分引起了我的注意,那就是页面底部的演示 基本上,这就是代码,我试图使它成为这样,当我在框架内单击时,矩形慢慢移动到鼠标单击的点,而不是跳到它(

我对JAVA非常陌生,我只是一个爱好者,最近我一直在学习一些关于制作UI和所有电子产品的教程来了解这一点,欢迎使用任何代码片段,但更重要的是,这个函数/过程叫什么,所以我可以从中更深入地了解swing的不同部分,这非常有用,我仍在努力完成这些组件

我目前还没有一个总体目标,我只是在寻找自己的立足点,但我想尝试制作一个自上而下的2d迷宫小游戏来学习

有一部分引起了我的注意,那就是页面底部的演示

基本上,这就是代码,我试图使它成为这样,当我在框架内单击时,矩形慢慢移动到鼠标单击的点,而不是跳到它(如果可能的话,稍后在另一个位置单击,它会在到达目的地之前改变路线)

为了了解这一点,我需要在什么样的领域寻找,欢迎使用任何代码片段,但更重要的是,这个函数/过程调用了什么,以便我可以更深入地了解它

工作演示代码如下

package painting;

import javax.swing.SwingUtilities;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseMotionAdapter;

public class SwingPaintDemo3 {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() { I am Trying to make it so when I click inside the 
            public void run() {
                createAndShowGUI(); 
            }
        });
    }

    private static void createAndShowGUI() {
        System.out.println("Created GUI on EDT? "+
        SwingUtilities.isEventDispatchThread());
        JFrame f = new JFrame("Swing Paint Demo");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        f.add(new MyPanel());
        f.pack();
        f.setVisible(true);
    } 
}

class MyPanel extends JPanel {

    private int squareX = 50;
    private int squareY = 50;
    private int squareW = 20;
    private int squareH = 20;

    public MyPanel() {

        setBorder(BorderFactory.createLineBorder(Color.black));

        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                moveSquare(e.getX(),e.getY());
            }
        });

        addMouseMotionListener(new MouseAdapter() {
            public void mouseDragged(MouseEvent e) {
                moveSquare(e.getX(),e.getY());
            }
        });

    }

    private void moveSquare(int x, int y) {
        int OFFSET = 1;
        if ((squareX!=x) || (squareY!=y)) {
            repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET);
            squareX=x;
            squareY=y;
            repaint(squareX,squareY,squareW+OFFSET,squareH+OFFSET);
        } 
    }


    public Dimension getPreferredSize() {
        return new Dimension(250,200);
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);       
        g.drawString("This is my custom Panel!",10,20);
        g.setColor(Color.RED);
        g.fillRect(squareX,squareY,squareW,squareH);
        g.setColor(Color.BLACK);
        g.drawRect(squareX,squareY,squareW,squareH);
    }  
}

谢谢你的建议;)

你想做“动画”。动画是通过使用动画来完成的。您可以签出:。动画相对简单,因为每个球在屏幕上移动时x/y位置的变化是固定的。在您的情况下,您需要计算当前位置和鼠标点之间的路径。因此,可以将点存储在ArrayList中,然后启动计时器。然后当计时器触发时,您1)从元素0获取下一个位置,2)移动正方形3)从ArrayList中删除元素0。然后,当ArrayList为空时,停止计时器。可能单击另一个位置,它会改变路线-清除ArrayList条目,然后根据当前位置和新的鼠标点添加新位置。@camickr感谢您的输入这对我有很大帮助。我试图查找一些作为参考的内容,但由于是一个新手,所以很难进行搜索。我对数组也很熟悉我从我买的一些书中获得了一些关于pascal和python的入门经验,所以现在我知道我可以期待为JAVA重建这些知识