0

として画像がJLabelあり、 をクリックするJLabelと、別Jlabelの長方形の画像が表示されます。

paintComponentorを使用してみpaintましたが、残念ながら、私のプログラムでは機能しません。paintComponentしたがって、 and/or以外にも方法があると考えなければなりませんpaint

目的は、Facebook のように画像の特定の部分に名前を付けてタグ付けすることです。

4

1 に答える 1

0

わお。

問題のペースの説明に基づいて、次のことを行う必要があります(私は思います):

  • 画像は JPanel に直接描画する必要があります。これは、誰かが画像をクリックしたときに、JPanel アクション リスナーを介してマウスの x 座標と y 座標を取得できるようにするためです。

  • 次に、境界線、名前のテキスト ボックス、および [OK] ボタンを一緒に持つ透明な JPanel を使用して JDialog を作成します。(1 つのダイアログ ウィンドウにすべてをまとめた方がよいかもしれません。) JDialog は移動可能ですが、左上端または中央の x 座標と y 座標を追跡する JDialog リスナーを作成する必要があります。 JDialog の透過的な JPanel。

JDialog JPanel は実際には透過的ではありません。画像 JPanel 上の JDialog JPanel の位置に注目し、画像の一部を画像 JPanel から JDialog JPanel にコピーすることによって、透明性の錯覚を作成する必要があります。

残りは、JDialog を適切に機能させることに比べれば、かなり簡単です。

追加するために編集: これは、JPanel に直接画像を描画し、マウスが押されたイベントを処理する JPanel の拡張です。

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;

import javax.swing.JPanel;
import javax.swing.event.MouseInputAdapter;

public class PicturePanel extends JPanel {

    private static final long serialVersionUID = 1L;

    protected Image picture;

    public PicturePanel(Image picture) {
        this.picture = picture;
        createPartControl();
    }

    protected void createPartControl() {
        new JPanel();
        int width = picture.getWidth(getParent());
        int height = picture.getHeight(getParent());
        addMouseListener(new CoordinateListener());
        setPreferredSize(new Dimension(width, height));
    }

    @Override 
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        int width = picture.getWidth(getParent());
        int height = picture.getHeight(getParent());

        g.drawImage(picture, 0, 0, width, height, null);
    }

    public class CoordinateListener extends MouseInputAdapter {
        @Override
        public void mousePressed(MouseEvent event) {
            int x = event.getX();
            int y = event.getY();
            System.out.println("(" + x + ", " + y + ")");
        }
    }

}
于 2011-12-01T17:30:52.260 に答える