【发布时间】:2015-11-25 06:43:45
【问题描述】:
以下代码有效并创建了一个可拖动图像 (DI)。我创建了 DI 类型的 2 个实例,test 和 test1。任何一个都可以,但我不知道如何将两者同时包含在 JFrame 中。当我尝试同时添加两者时,我只会添加最后一个。
我在这里做了很多阅读,我知道我需要创建一个 Jpanel 并将每个图像添加到 Jpanel 然后添加到 JFrame,但在这种情况下,DI 是 JPanel。
我希望这里的人可以提供帮助,我已经经历了很多试验和错误以及大量的互联网搜索,但我还没有接近答案。
这是代码 -->
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.event.*;
public class DI extends JPanel
{
private BufferedImage image;
Rectangle r;
public DI(BufferedImage image) {
super();
this.image = image;
r = new Rectangle(10, 10, image.getWidth(), image.getHeight());
this.setFocusable(true);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.drawImage(image, r.x, r.y, this);
//Add a border, red if picture currently has focus
if (isFocusOwner()) {
g.setColor(Color.RED);
} else {
g.setColor(Color.BLACK);
}
g2.draw(r);
}
public void setRect(int x, int y) {
r.x = x;
r.y = y;
repaint();
}
public BufferedImage getImage() {
return image;
}
public void setImage(BufferedImage image) {
this.image = image;
r.setSize(image.getWidth(), image.getHeight());
}
public static void main(String[] args) throws IOException {
File file = new File("happy.png");
BufferedImage image = ImageIO.read(file);
DI test = new DI(image);
DragHandler handler = new DragHandler(test);
test.addMouseListener(handler);
test.addMouseMotionListener(handler);
File file2 = new File("sad.png");
BufferedImage image2 = ImageIO.read(file2);
DI test2 = new DI(image2);
DragHandler handler2 = new DragHandler(test2);
test2.addMouseListener(handler2);
test2.addMouseMotionListener(handler2);
JFrame f = new JFrame("This is a Draggable Icon");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(test);
f.setContentPane(test2);
f.setSize(400,400);
f.setLocation(200,200);
f.setVisible(true);
}
}
class DragHandler extends MouseInputAdapter {
DI di;
Point offset;
boolean dragging;
public DragHandler(DI di) {
this.di = di;
offset = new Point();
dragging = false;
}
public void mousePressed(MouseEvent e) {
Point p = e.getPoint();
if(di.r.contains(p)) {
offset.x = p.x - di.r.x;
offset.y = p.y - di.r.y;
dragging = true;
}
}
public void mouseReleased(MouseEvent e) {
dragging = false;
}
public void mouseDragged(MouseEvent e) {
if(dragging) {
int x = e.getX() - offset.x;
int y = e.getY() - offset.y;
di.setRect(x, y);
}
}
}
【问题讨论】:
-
你的
DI应该可以处理多张图片
标签: java swing drag-and-drop draggable