크기조절되는 반투명 창(JFrame)

크기조절되는 반투명 창(JFrame)

package com;

import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;

public class FormCtrl {
 
 public static void main(String[] args) {
  new FormMeasure();
 }

}

class FormMeasure extends JFrame{
 
 int mode;
 int preMx;
 int preMy;
 
 public FormMeasure(){
  setSize(300, 300);
  //setBackground(new Color(255,10,10));
  
  setUndecorated(true);//프레임 없애기
  setForeground(new Color(0, 0, 255));
  getContentPane().setBackground(new Color(0, 0, 255));//파란색
  setOpacity(0.2f);//반투명
  
  
  //setResizable(false);//최대화 불가능
  setVisible(true);
  
  preMx=0;
  preMy=0;
  
  addMouseMotionListener(new MouseMotionListener() {
   
   @Override
   public void mouseMoved(MouseEvent e) {
    // TODO Auto-generated method stub
    //System.out.println(“움직임”);
   }
   
   @Override
   public void mouseDragged(MouseEvent e) {
    int gap=20;
    
    int newMx=e.getX();
    int newMy=e.getY();
    
    //width를 조절하는 경우
    if(mode==1){
     int wid=getBounds().width+newMx-preMx;
     if(wid<40) wid=40;
     if(newMx<0) wid=40;
     
     setBounds(getBounds().x,
       getBounds().y,
       wid,
       getBounds().height);
     preMx=newMx;
    }
    //height를 조절하는 경우
    else if(mode==2){
     int hei=getBounds().height+newMy-preMy;
     if(hei<40) hei=40;
     if(newMy<0) hei=40;
     
     setBounds(getBounds().x,
       getBounds().y,
       getBounds().width,
       hei);
     preMy=newMy;
    }
    //width와 height를 둘 다 조절하는 경우
    else if(mode==3){
     int wid=getBounds().width+newMx-preMx;
     if(wid<40) wid=40;
     if(newMx<0) wid=40;
     
     int hei=getBounds().height+newMy-preMy;
     if(hei<40) hei=40;
     if(newMy<0) hei=40;
     
     setBounds(getBounds().x,
       getBounds().y,
       wid,
       hei);
     preMx=newMx;
     preMy=newMy;
    }
    //창을 이동하는 경우(일반 드래그)
    else if(mode==10){
     //일반 드래그
     setBounds(getBounds().x+newMx-preMx,
       getBounds().y+newMy-preMy,
       getBounds().width,
       getBounds().height);
    }
    
   }
  });
  
  addMouseListener(new MouseListener() {
   
   @Override
   public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void mousePressed(MouseEvent e) {
    // TODO Auto-generated method stub

    //경계선에서 20픽셀 이내이면 크기조절
    int gap=20;
    
    preMx=e.getX();
    preMy=e.getY();
    
    //click=true;
    if(preMx>getBounds().width-gap && preMy>getBounds().height-gap){
     //오른쪽 아래 꼭지점
     mode=3;
    }
    else if(preMx>getBounds().width-gap){
     //오른쪽 끝선
     mode=1;
     
    }
    else if(preMy>getBounds().height-gap){
     //아래쪽
     mode=2;
     
    }
    else{
     mode=10;
    }
    
    
   }
   
   @Override
   public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub
    
   }
   
   @Override
   public void mouseClicked(MouseEvent e) {
    // TODO Auto-generated method stub
    
   }
  });
 }
}