java - 绘制一个向鼠标单击点缓慢移动而不是跳转到它的矩形(JAVA)
问题描述
我对 JAVA 很陌生,我只是一个爱好者,就在最近,我一直在关注一些关于制作 UI 的教程,所有的人都在寻找了解这一点,欢迎任何代码片段,但更多的是这个函数/过程叫什么我可以从ORACLE DOCS中更深入地了解 Swing 的不同部分,这确实提供了丰富的信息,我仍在努力研究这些组件。
我目前没有一个总体目标,只是在寻找自己的脚,但我想尝试制作一个小型的自上而下的 2d 迷宫游戏来学习。
一部分引起了我的注意,它是页面底部的这个演示 https://docs.oracle.com/javase/tutorial/uiswing/painting/step3.html
基本上这是代码,我正在尝试制作它,所以当我在框架内单击时,矩形会缓慢地移向鼠标单击的点而不是跳转到它(如果可能,稍后再单击另一个位置,它会改变到达目的地之前的路线。
我需要寻找什么样的区域来了解这一点,欢迎任何代码片段,但更多的是这个函数/过程是什么,所以我可以更深入地研究它。
下面的工作演示代码
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);
}
}
感谢您的任何建议;)
解决方案
推荐阅读
- arrays - 循环数组中@的目的?
- typescript - 使用 TypeScript 构建后构建中缺少 Vue 文件
- performance - 为什么 MATLAB 中的视频代码运行缓慢?
- python - .tfstate 文件在文件配置期间锁定;Process Explorer 表示没有其他锁定进程;部署不带文件配置器的作品
- docker - 本地 kubernetes 从本地镜像运行 docker pull 失败
- logging - Quarkus 是否有压缩文件日志处理程序?
- c# - 绑定到 appsettings.json 中的空数组时的空属性
- c++ - 谷歌原型中的多重网络“可变”
- internationalization - 如何使 DITA PDF 出版物使用挪威语中定义的图形和表格标题标签?
- xamarin - xamarin 表单 - 如何访问 BindingContext 中的字符串