Java 使用鼠标拖动方法拖动图像
我试图用mouseDragged方法编写一个可以拖动图像的代码,但我目前的代码似乎无法成功地做到这一点。我的目标是确保当我在applet中的每个图像上放置拖动时,它会跟随光标Java 使用鼠标拖动方法拖动图像,java,swing,applet,paint,mouse-listeners,Java,Swing,Applet,Paint,Mouse Listeners,我试图用mouseDragged方法编写一个可以拖动图像的代码,但我目前的代码似乎无法成功地做到这一点。我的目标是确保当我在applet中的每个图像上放置拖动时,它会跟随光标 /* Using drag mouseEvent, all objects in the app can be dragged... */ package finals_two; import java.applet.*; import java.awt.*; import java.awt.event.*; /* 10
/* Using drag mouseEvent, all objects in the app can be dragged...
*/
package finals_two;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
/* 10/16/2015
* @author michael.pabilona
*/
public class Finals_Two extends Applet implements MouseMotionListener
{
int hei, wid, xCoordinate, yCoordinate;
Image leftReceiver1, leftReceiver2, leftReceiver3;
Image rightReceiver1, rightReceiver2, rightReceiver3;
Image leftSpiker, rightSpiker, center, setter;
public void init()
{
hei = getSize().height;
wid = getSize().width;
xCoordinate = hei;
yCoordinate = wid;
addMouseMotionListener(this);
}
public void mouseDragged(MouseEvent e)
{
xCoordinate = e.getX();
yCoordinate = e.getY();
repaint();
}
public void paint(Graphics gr)
{
setBackground(Color.white);
gr.setColor(Color.black);
//court bound top line
gr.drawLine(400, 130, 1200, 130);
//court bound bottom line
gr.drawLine(200, 530, 1000, 530);
//court bound left line
gr.drawLine(400, 130, 200, 530);
//court bound right line
gr.drawLine(1000, 530, 1200, 130);
//net
gr.drawLine(800, 130, 600, 530);
gr.drawLine(800, 130, 800, 0);
gr.drawLine(600, 530, 600, 400);
//net horizontal lines
gr.drawLine(800, 0, 600, 400);
gr.drawLine(800, 10, 600, 410);
gr.drawLine(800, 20, 600, 420);
gr.drawLine(800, 30, 600, 430);
gr.drawLine(800, 40, 600, 440);
gr.drawLine(800, 50, 600, 450);
gr.drawLine(800, 60, 600, 460);
gr.drawLine(800, 70, 600, 470);
gr.drawLine(800, 80, 600, 480);
//net vertical lines
gr.drawLine(795, 5, 795, 90);
gr.drawLine(790, 20, 790, 100);
gr.drawLine(785, 30, 785, 110);
gr.drawLine(780, 40, 780, 120);
gr.drawLine(775, 50, 775, 130);
gr.drawLine(770, 60, 770, 140);
gr.drawLine(765, 70, 765, 150);
gr.drawLine(760, 80, 760, 160);
gr.drawLine(755, 90, 755, 170);
gr.drawLine(750, 100, 750, 180);
gr.drawLine(745, 110, 745, 190);
gr.drawLine(740, 120, 740, 200);
gr.drawLine(735, 130, 735, 210);
gr.drawLine(730, 140, 730, 220);
gr.drawLine(725, 150, 725, 230);
gr.drawLine(720, 160, 720, 240);
gr.drawLine(715, 170, 715, 250);
gr.drawLine(710, 180, 710, 260);
gr.drawLine(705, 190, 705, 270);
gr.drawLine(700, 200, 700, 280);
gr.drawLine(695, 210, 695, 290);
gr.drawLine(690, 220, 690, 300);
gr.drawLine(685, 230, 685, 310);
gr.drawLine(680, 240, 680, 320);
gr.drawLine(675, 250, 675, 330);
gr.drawLine(670, 260, 670, 340);
gr.drawLine(665, 270, 665, 350);
gr.drawLine(660, 280, 660, 360);
gr.drawLine(655, 290, 655, 370);
gr.drawLine(650, 300, 650, 380);
gr.drawLine(645, 310, 645, 390);
gr.drawLine(640, 320, 640, 400);
gr.drawLine(635, 330, 635, 410);
gr.drawLine(630, 340, 630, 420);
gr.drawLine(625, 350, 625, 430);
gr.drawLine(620, 360, 620, 440);
gr.drawLine(615, 370, 615, 450);
gr.drawLine(610, 380, 610, 460);
gr.drawLine(605, 390, 605, 470);
gr.drawLine(600, 390, 600, 480);
//left mid line
gr.drawLine(625, 130, 425, 530);
//right mid line
gr.drawLine(975, 130, 775, 530);
//left backend receivers
leftReceiver1 = getImage(getDocumentBase(),"receiver.jpg");
gr.drawImage(leftReceiver1, 400, 100, 90, 90, this);
leftReceiver2 = getImage(getDocumentBase(),"receiver.jpg");
gr.drawImage(leftReceiver2, 325, 250, 90, 90, this);
leftReceiver3 = getImage(getDocumentBase(),"server1.jpg");
gr.drawImage(leftReceiver3, 75, 375, 150, 150, this);
//right backend receivers
rightReceiver1 = getImage(getDocumentBase(),"receiver1.jpg");
gr.drawImage(rightReceiver1, 1000, 100, 100, 100, this);
rightReceiver2 = getImage(getDocumentBase(),"receiver1.jpg");
gr.drawImage(rightReceiver2, 950, 250, 100, 100, this);
rightReceiver3 = getImage(getDocumentBase(),"receiver1.jpg");
gr.drawImage(rightReceiver3, 900, 400, 100, 100, this);
//left front liners
leftSpiker = getImage(getDocumentBase(),"spiker.jpg");
gr.drawImage(leftSpiker, 650, 30, 100, 100, this);
center = getImage(getDocumentBase(),"spiker.jpg");
gr.drawImage(center,600,150,100,100,this);
setter = getImage(getDocumentBase(),"setter.jpg");
gr.drawImage(setter, 500, 300, 150, 150, this);
//right front liners
rightSpiker = getImage(getDocumentBase(),"spiker1.jpg");
gr.drawImage(rightSpiker,650,350,130,130,this);
center = getImage(getDocumentBase(),"server.jpg");
gr.drawImage(center,750,150,130,130,this);
setter = getImage(getDocumentBase(),"defense1.jpg");
gr.drawImage(setter,850,90,110,110,this);
}
@Override
public void mouseMoved(MouseEvent e) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
这是我当前的代码。有人能告诉我我错过了什么或者我做错了什么吗?为了拖动任何东西,你需要知道一些事情。你需要知道他们在哪里以及他们占据的空间 一旦知道了这一点,就可以监视
mouseDragged
事件并更新它们的位置
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Image;
导入java.awt.Point;
导入java.awt.Rectangle;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.io.IOException;
导入java.util.HashMap;
导入java.util.Map;
导入javax.imageio.imageio;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
公营拖网船{
公共静态void main(字符串[]args){
新德拉格姆();
}
公共排水沟{
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
例如printStackTrace();
}
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(newtestpane());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类TestPane扩展了JPanel{
私人地图位置;
公共测试窗格(){
位置=新HashMap(25);
试一试{
locations.put(ImageIO.read(getClass().getResource(“/Pony.png”)),新点(0,0));
}捕获(IOEX异常){
例如printStackTrace();
}
MouseAdapter ma=新的MouseAdapter(){
私人图像绘制;
专用点点击偏移;
@凌驾
公共无效鼠标按下(MouseEvent e){
对于(Map.Entry:locations.entrySet()){
Image=entry.getKey();
Point=entry.getValue();
矩形边界=新矩形(
点x,点y,
image.getWidth(TestPane.this)、image.getHeight(TestPane.this));
if(bounds.contains(e.getPoint())){
dragImage=图像;
单击偏移=新点(点.x-e.getPoint().x,点.y-e.getPoint().y);
打破
}
}
}
@凌驾
公共无效MouseEvent(MouseEvent e){
dragImage=null;
单击offset=null;
}
@凌驾
公共无效鼠标标记(鼠标事件e){
if(dragImage!=null){
点dragPoint=新点(如getPoint());
dragPoint.x+=单击偏移量.x;
拖动点.y+=单击偏移量.y;
位置。放置(绘图、绘图点);
重新油漆();
}
}
};
addMouseListener(硕士);
addMouseMotionListener(ma);
}
@凌驾
公共维度getPreferredSize(){
返回新维度(400400);
}
受保护组件(图形g){
超级组件(g);
Graphics2D g2d=(Graphics2D)g.create();
对于(Map.Entry:locations.entrySet()){
Point=entry.getValue();
g2d.drawImage(entry.getKey(),point.x,point.y,this);
}
g2d.dispose();
}
}
}
要拖动任何东西,您需要知道一些事情。你需要知道他们在哪里以及他们占据的空间
一旦知道了这一点,就可以监视mouseDragged
事件并更新它们的位置
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Image;
导入java.awt.Point;
导入java.awt.Rectangle;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.io.IOException;
导入java.util.HashMap;
导入java.util.Map;
导入javax.imageio.imageio;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
公营拖网船{
公共静态void main(字符串[]args){
新德拉格姆();
}
公共排水沟{
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
例如printStackTrace();
}
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(newtestpane());
frame.pack();
frame.setLocationRelativeTo(空);
fr
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class DragMe {
public static void main(String[] args) {
new DragMe();
}
public DragMe() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
private Map<Image, Point> locations;
public TestPane() {
locations = new HashMap<>(25);
try {
locations.put(ImageIO.read(getClass().getResource("/Pony.png")), new Point(0, 0));
} catch (IOException ex) {
ex.printStackTrace();
}
MouseAdapter ma = new MouseAdapter() {
private Image dragImage;
private Point clickOffset;
@Override
public void mousePressed(MouseEvent e) {
for (Map.Entry<Image, Point> entry : locations.entrySet()) {
Image image = entry.getKey();
Point point = entry.getValue();
Rectangle bounds = new Rectangle(
point.x, point.y,
image.getWidth(TestPane.this), image.getHeight(TestPane.this));
if (bounds.contains(e.getPoint())) {
dragImage = image;
clickOffset = new Point(point.x - e.getPoint().x, point.y - e.getPoint().y);
break;
}
}
}
@Override
public void mouseReleased(MouseEvent e) {
dragImage = null;
clickOffset = null;
}
@Override
public void mouseDragged(MouseEvent e) {
if (dragImage != null) {
Point dragPoint = new Point(e.getPoint());
dragPoint.x += clickOffset.x;
dragPoint.y += clickOffset.y;
locations.put(dragImage, dragPoint);
repaint();
}
}
};
addMouseListener(ma);
addMouseMotionListener(ma);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
for (Map.Entry<Image, Point> entry : locations.entrySet()) {
Point point = entry.getValue();
g2d.drawImage(entry.getKey(), point.x, point.y, this);
}
g2d.dispose();
}
}
}