我需要在java applet中显示一个图像,文本元素(标签)移动到用户选择的点。是否可以通过在图像上拖放文本?我需要使用哪些方法?
我正在寻找与this类似的东西。
编辑:感谢您的有用回复。下面的代码工作正常!但是如何通过图像中的x,y坐标获得文本位置?
public class MouseDragTest extends JPanel {
private static final String TITLE = "Drag me!";
private static final int W = 640;
private static final int H = 480;
private Point textPt = new Point(W / 2, H / 2);
private Point mousePt;
Image img;
public MouseDragTest() {
img = Toolkit.getDefaultToolkit().createImage("my_image.jpg");
this.setFont(new Font("Serif", Font.ITALIC + Font.BOLD, 32));
this.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
mousePt = e.getPoint();
repaint();
}
});
this.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
int dx = e.getX() - mousePt.x;
int dy = e.getY() - mousePt.y;
textPt.setLocation(textPt.x + dx, textPt.y + dy);
mousePt = e.getPoint();
repaint();
}
});
}
@Override
public Dimension getPreferredSize() {
return new Dimension(W, H);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
int w2 = g.getFontMetrics().stringWidth(TITLE) / 2;
g.drawImage(img, 0, 0, null);
g.drawString(TITLE, textPt.x - w2, textPt.y);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame(TITLE);
f.add(new MouseDragTest());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
});
}
}
答案 0 :(得分:1)
您可以使用drawImage()
中的paintComponent()
来显示发票,就像他们显示here一样,并拖动文字,就像他们显示here一样。另一种方法是使用The Glass Pane。
答案 1 :(得分:1)
如何通过图像中的 x,y 坐标获取文本位置?
听起来您想要反复编辑文本和位置。拖动完成后,textPt
将成为下次加载图像时要绘制文本的点。您可以将详细信息存储在java.util.Preferences
中,并在重新启动时将其还原。
private static class AnnotatedImage {
File file;
List<String> notes;
List<Point> points;
}
在使用createImage()
时,请在绘图时使用this
作为图像观察者。
g.drawImage(img, 0, 0, this);