package awt;
import java.awt.*;
import java.awt.event.*;
public class PhotoImage extends Frame implements ItemListener, ActionListener
{
Toolkit toolkit; //툴킷
Image img; //이미지 변수 선언
String fileName;
Button btnFile; // 파일 찾기 버튼 생성
TextField tfFile; //텍스트필드 생성(파일명이 표시되로록 함)
Label lblName;
Checkbox cb1, cb2, cb3, cb4; //체크박스 4개 만듦,,,, 그룹핑해야함
DrawImage2 di=new DrawImage2(); //이미지를 구현해주는 di 객체 만듦
int imageIdx=1;
int x, y;
public PhotoImage(String title)//타이틀 생성자 구현
{
super(title);
this.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
fileName=title;
this.setTitle(fileName);
toolkit=toolkit.getDefaultToolkit();
img=toolkit.getImage(fileName);
x=img.getWidth(this);
y=img.getHeight(this);
this.setDesign();
this.setLocation(300, 100);
this.setSize(400, 600);
this.setVisible(true);
}
public void setDesign()
{
CheckboxGroup cbg=new CheckboxGroup(); //체크박스를 그룹화
cb1=new Checkbox("원본",true,cbg);
cb2=new Checkbox("상하",false,cbg);
cb3=new Checkbox("좌우",false,cbg);
cb4=new Checkbox("상하좌우",false,cbg);
cb1.addItemListener(this); //체크박스 클릭시 액션
cb2.addItemListener(this);
cb3.addItemListener(this);
cb4.addItemListener(this);
Panel pTop=new Panel();
Panel pBottom=new Panel();
pTop.setBackground(Color.pink);
//레이블 붙이기
lblName=new Label();
lblName.setBackground(Color.pink);
lblName.setBounds(10,10,150,200);
lblName.setText("파일명:");
pTop.add(lblName);
///텍스트필트 추가시작
tfFile=new TextField("input data",20);
tfFile.setBounds(50,100,500,300);
pTop.add(tfFile);
tfFile.setText(fileName);
///////텍스트필트 추가 끝
btnFile=new Button("파일 찾기");
pTop.add(btnFile); //버튼을 pTop패널에 붙임
this.add("North",pTop); //pTop 패널을 프레임 북쪽에 붙임
pBottom.add(cb1);//pBottoom 패널에 체크박스 버튼 붙임
pBottom.add(cb2);
pBottom.add(cb3);
pBottom.add(cb4);
pBottom.setBackground(Color.yellow);
this.add("South",pBottom); //pBottom 패널은 프레임 남쪽에 붙임
this.add("Center",di);
////////버튼 액션구현
btnFile.addActionListener(this);
tfFile.addActionListener(this);
//FileDialog 사용할 예정 API 참조
}
@Override
public void itemStateChanged(ItemEvent e)
{
Object ob=e.getSource();
if(ob==cb1)
imageIdx=1;
else if(ob==cb2)
imageIdx=2;
else if(ob==cb3)
imageIdx=3;
else if(ob==cb4)
imageIdx=4;
di.repaint();
}
/* 반전 시킬때 좌표의 변화///////////////
* 원본 0 0 x y
* 좌우 x 0 0 y
* 상하 0 y x 0
* 상하좌우 x y 0 0
*
* */////////////////////////////////////
class DrawImage2 extends Canvas
{
public void paint(Graphics g)
{
//g.drawImage(img,10,10,350,500,this);
x=img.getWidth(this);
y=img.getHeight(this);
switch(imageIdx)
{
case 1://원본
g.drawImage(img,10,10,350,500,0,0,x,y,this);
break;
case 2://상하
g.drawImage(img,10,10,350,500,0,y,x,0,this);
break;
case 3://좌우
g.drawImage(img,10,10,350,500,x,0,0,y,this);
break;
case 4://상하좌우
g.drawImage(img,10,10,350,500,x,y,0,0,this);
break;
}
}
}
@Override
public void actionPerformed(ActionEvent e)
{
Object ob=e.getSource();
if(ob==btnFile)
{
FileDialog dlg=new FileDialog(this,"파일열기",FileDialog.LOAD);
dlg.setVisible(true);
String path=dlg.getDirectory();
fileName=dlg.getFile();
if(fileName==null)
return;
fileName=path+fileName;
img=toolkit.getImage(fileName);
this.setTitle(fileName); //윈도우 창의 타이틀을 파일 경로로 바꿔줌
tfFile.setText(fileName);//텍스트필드에 파일경로와 파일명을 뿌려줌
//그림을 다시 그려줌
di.repaint();
//System.out.println(path); 디렉토리명이 제대로 나오는 지 확인용
//System.out.println(fileName);
}
else if(ob==tfFile)//텍스트 창에서 액션을 발생시킨 경우(파일명을 입력하고 엔터로 값을 받을 경우)
{
fileName=tfFile.getText();
img=toolkit.getImage(fileName);
this.setTitle(fileName);
di.repaint();
}
}
public static void main(String[] args)
{
new PhotoImage("D:/302_java/java/image/연예인사진/IMG_0499.JPG");
//new PhotoImage("http://imgnews.naver.com/image/poktannews/2011/04/07/201104070539776782_1.jpg");
}
}
뭔가 진짜 프로그램 같다 ㅋㅋㅋ
실행결과
본 블로그는 페이스북 댓글을 지원합니다.