として画像がJLabel
あり、 をクリックするJLabel
と、別Jlabel
の長方形の画像が表示されます。
paintComponent
orを使用してみpaint
ましたが、残念ながら、私のプログラムでは機能しません。paintComponent
したがって、 and/or以外にも方法があると考えなければなりませんpaint
。
目的は、Facebook のように画像の特定の部分に名前を付けてタグ付けすることです。
として画像がJLabel
あり、 をクリックするJLabel
と、別Jlabel
の長方形の画像が表示されます。
paintComponent
orを使用してみpaint
ましたが、残念ながら、私のプログラムでは機能しません。paintComponent
したがって、 and/or以外にも方法があると考えなければなりませんpaint
。
目的は、Facebook のように画像の特定の部分に名前を付けてタグ付けすることです。
わお。
問題のペースの説明に基づいて、次のことを行う必要があります(私は思います):
画像は 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 + ")");
}
}
}