반응형
본글은 2007년 01월 07일에 네이버 블로그(본인 운영) 에 포스팅 한 글입니다.

지식인에 Button을 마우스 드래그 할때 마우스 따라 움직이게 하는 방법에 대해서

 

제가 올린 답변입니다. 질문자가 요청 한 만큼은 처리 못했네요...

 

내공 향상을 위해 오늘도 열공중입니다....

 

아래 소스 한번 참고 해 보세요.~~

 

 

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestButton extends JFrame {
 
  JPanel pan = new JPanel(); // 이벤트 등록용 패널

  // AWT의 Button으로도 가능
  JButton bu = new JButton("버튼");

  // 버튼의 기본 좌표용 변수
  int x = 10;
  int y = 10;
  int width = 80;
  int height = 20;
 
  // 버튼의 움직임 여부 결정용 변수
  boolean moves = false;
 
 
  public TestButton(){ // 생성자 디자인 및 이벤트 설정
    this.getContentPane().setLayout(new BorderLayout());
    pan.setLayout(null);
    bu.setBounds(x,y,width,height);
    pan.add(bu);
    this.getContentPane().add("Center", pan); 
    this.setSize(600,400);
    this.setVisible(true);
    bu.setFocusable(false);
   
    // 마우스 버튼을 놓았을경우 이동 가능 여부 false로 돌림
    pan.addMouseListener(new MouseAdapter() {
     public void mouseReleased(MouseEvent ev) {
      moves = false;
     }
    });
   
    // 배경 JPanel에 MouseMotionListener를 등록시켜 Drag때 처리하도록 함...
    pan.addMouseMotionListener(new MouseMotionAdapter() {
     public void mouseDragged(MouseEvent ev) {
      int tem_x = ev.getX(); // 이벤트 발생 좌표값중 x값 추출
      int tem_y = ev.getY(); // 이벤트 발생 좌표값중 y값 추출..

   
      /*System.out.println("버튼의 좌표 : " + bu.getX() + ", " + bu.getY());
      *System.out.println("버튼의 영역 : " + (bu.getX()+bu.getWidth()) + "," +
       * (bu.getY() + bu.getHeight()));
      *System.out.println("이벤트발생위치 : " + ev.getX() + ", " + ev.getY());
      * 버튼의 영역 안에 있으면 true로 설정...
     */

     if((tem_x >= bu.getX()) && (tem_x <= (bu.getX() + bu.getWidth()))) {
       
       if((tem_y > bu.getY()) && (tem_y <= (bu.getY() + bu.getHeight()))) {
        moves = true;
       }
      }
      // 마우스 포인터가 버튼 영역 안 여부 판단 후 버튼 위치 재지정...
      if(moves) {       
       bu.setBounds(tem_x-(width/2), tem_y-(height/2), width, height);
       
      }
     }
    });
  }
 
  public static void main(String [] args) {
    TestButton tb = new TestButton();
  }
}


반응형
Posted by onlyTheOne
,