2

ユーザーが選択したポイントに移動するためのテキスト要素 (ラベル) を使用して、Java アプレットで画像を表示する必要があります。テキストを画像の上にドラッグアンドドロップすることは可能ですか?どのような方法を使用する必要がありますか?

これに似たものを探しています。

編集: 有益なご回答ありがとうございます。以下のコードは正常に動作します!しかし、画像内の 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);

            }
        });
    }
}
4

2 に答える 2

1

drawImage()inを使用しpaintComponent()て請求書を表示することができます, like they show here , and drag text, like they show here . もう 1 つの方法は、The Glass Paneを使用することです。

于 2013-01-31T12:51:22.813 に答える
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);
于 2013-01-31T17:54:01.183 に答える