首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Swing 圖片拖曳面板實作:滑鼠事件監聽與雙擊開啟檔案對話框

     編輯:Java 相關知識

建立可拖曳圖片的 Swing 面板,支援雙擊開啟圖片檔案、滑鼠拖曳移動圖片位置,展示事件監聽與繪圖機制。

核心類別

  • DragingFrame:主視窗,設定標題、大小、關閉操作,中心放置 ImagePanel。
  • ImagePanel:繼承 JPanel,實作滑鼠監聽與繪圖邏輯。

拖曳狀態機

private enum DragStatus { Ready, Dragging }
private DragStatus status = DragStatus.Ready;
private Point imagePosition = new Point(0, 0);      // 當前圖片位置
private Point imageStartPosition = new Point(0, 0); // 拖曳起始圖片位置
private Point mouseStartPosition;                   // 拖曳起始滑鼠位置

事件處理

  1. 雙擊開啟:mouseClicked 偵測 getClickCount() == 2,彈出 JFileChooser 選擇圖片,載入後 repaint()。
  2. 按下開始拖曳:mousePressed 記錄滑鼠與圖片起始座標,狀態切為 Dragging。
  3. 拖曳移動:mouseDragged 計算偏移量 imagePosition = imageStart + (mouseNow - mouseStart),呼叫 repaint()。
  4. 釋放結束:mouseReleased 狀態歸 Ready。

繪圖邏輯

@Override
protected void paintComponent(Graphics g) {
  super.paintComponent(g);
  if (image != null) {
    g.drawImage(image, (int)imagePosition.getX(), (int)imagePosition.getY(), this);
  }
}

執行方式

public static void main(String[] args) throws Exception {
  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  DragingFrame frame = new DragingFrame();
  frame.setSize(400, 300);
  frame.setLocation(300, 300);
  frame.setResizable(false);
  frame.setTitle("雙擊打開圖片,然後拖曳");
  frame.setVisible(true);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved