크기조절되는 반투명 창(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
}
});
}
}