ShapeTest

Programming/JAVA 2011. 4. 7. 14:09


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");
  
 }

}

뭔가 진짜 프로그램 같다 ㅋㅋㅋ

실행결과

Posted by 커널제로

본 블로그는 페이스북 댓글을 지원합니다.

,