Javaで、画像をドラッグドロップすると移動できるような機能を実装したいのですが、どのようにしたら実装できるでしょうか?画像を表示するところまでは下記のようにすれば出来たのですが…。


http://www.javadrive.jp/tutorial/jlabel/index6.html

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/11/08 02:39:27
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:bufferings No.1

回答回数4ベストアンサー獲得回数1

ポイント60pt

こういうことですか?

class SSample6_1 extends JFrame{
  public static void main(String args[]){
    SSample6_1 frame = new SSample6_1("タイトル");
    frame.setVisible(true);
  }
  
  private JLabel label;

  SSample6_1(String title){
    setTitle(title);
    setBounds(100, 100, 300, 250);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel p = new JPanel();

    ImageIcon icon1 = new ImageIcon("./board.png");
    
    label = new JLabel(icon1);

    // 座標指定
    p.setLayout(null);
    label.setBounds(0, 0, 50, 50);
    
    // リスナーを登録
    MyMouseListener listener = new MyMouseListener();
    label.addMouseListener(listener);
    label.addMouseMotionListener(listener);
    
    p.add(label);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }
  
  private class MyMouseListener extends MouseAdapter{
    private int dx;
    private int dy;

    public void mouseDragged(MouseEvent e) {
      // マウスの座標からラベルの左上の座標を取得する
      int x = e.getXOnScreen() - dx;
      int y = e.getYOnScreen() - dy;
      label.setLocation(x, y);
    }

    public void mousePressed(MouseEvent e) {
      // 押さえたところからラベルの左上の差を取っておく
      dx = e.getXOnScreen() - label.getX();
      dy = e.getYOnScreen() - label.getY();
    }
  }
}
id:rapuntuleru

すばらしい!

2009/11/08 02:39:12
  • id:rafting
    以前いた会社でプログラマが作りましたが、トラブル続きで使い物にならずといったものになりました。
    (色々改善を試みていたようですが、結局、危なくてお客さんのサイトには組み込まない方が安全という結論に。)
    また、ユーザーは「参照」から画像指定することに慣れているため、ドラッグ&ドロップの操作は使いづらいという印象を受けると思います。(ネガティブな意見で恐縮です)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません