본글은 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();
}
}