Sidewinder


World


FishMusic


LaughingBaby


Friday, July 25, 2008

java image view





import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.io.File;

import javax.swing.JOptionPane;

public class ImgViewer extends Frame implements ActionListener {
Image curImg;
Panel p;
Button b0, b1, b2, b3;
Dimension d;
int command;
static final int SHOW_NORM = 0;
static final int SHOW_HORIZONTAL = 1;
static final int SHOW_VERTICAL = 2;
ImgViewer(String s) {
super(s + " 파일 보기");
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});

// curImg = Toolkit.getDefaultToolkit().getImage(s);
command = SHOW_NORM;
setLayout(new BorderLayout());
p = new Panel();
p.add(b0 = new Button("File Open")); // 파일 오픈 Button 추가
p.add(b1 = new Button("정상 그림"));
p.add(b2 = new Button("좌우뒤집기"));
p.add(b3 = new Button("위아래뒤집기"));
add(p, BorderLayout.SOUTH);
b0.addActionListener(this); // 해당 Button 에 ActionListener을 설정 한다.
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
setSize(700,300);
setVisible(true);
//d = p.getSize();은 여기에 한번사용 하면 되고요.
d = p.getSize();

}

public void actionPerformed(ActionEvent e) {
Button b = (Button) e.getSource();
if (e.getSource() == b0) { // File Open Button 이 눌렸을 경우 처리...
openImage();
return;
} else if (b.getLabel().equals("정상 그림")) {
command = SHOW_NORM;
} else if (b.getLabel().equals("좌우뒤집기")) {
command = SHOW_HORIZONTAL;
} else if (b.getLabel().equals("위아래뒤집기")) {
command = SHOW_VERTICAL;
}
reDraw(command);
}

// File Open Button 이 눌렸을 경우 호출 된다.
public void openImage() {
FileDialog fd = new FileDialog(this, "File Open");
fd.show();
String img = fd.getDirectory() + fd.getFile();

if (isOpen(img)) {
curImg = Toolkit.getDefaultToolkit().getImage(
fd.getDirectory() + fd.getFile());

} else {
JOptionPane jp = new JOptionPane("Message Box",
JOptionPane.ERROR_MESSAGE);
jp.showMessageDialog(this,"This is file not Image!! \nPlease !! Selected Image File ");
}
}

// 선택된 File이 이미지 File인지를 비교 true , false 를 Return
public boolean isOpen(String img) {
String[] extension = { "bmp", "jpg", "jpeg", "gif" };
for (int i = 0; i < extension.length; i++) {
if (img.toLowerCase().endsWith("." + extension[i])) {
return true;
}
}
return false;
}

public void paint(Graphics g) {
if (curImg == null)
return;

int w = curImg.getWidth(this);
int h = curImg.getHeight(this);


switch (command) {
case SHOW_NORM:
g.drawImage(curImg, 5, d.height + 5, this);
// setSize(curImg.getWidth(this),curImg.getHeight(this)); 이건 필요 없음
// setSize(w,h+100);

break;
case SHOW_HORIZONTAL:
//33창의 영역 5는 님이 설정한 영역
g.drawImage(curImg, 0, 0+33+5, d.width, d.height+h+5, w, 0, w-d.width, h, this);
// setSize(w,h+100);
break;
case SHOW_VERTICAL:
//여기 좀 이상해요. 님의 원소스 대로사용하고, 그냥 좌표만 수정했습니다.
g.drawImage(curImg, 0, 0+33+5, d.width, d.height+h+5, w, h, w-d.width, 0, this);
//setSize(w,h+100);
break;
}

setSize(w,h+100);//여기에 한번
}

public void reDraw(int command) {
this.command = command;
repaint();
}

public static void main(String args[]) {
ImgViewer iv = new ImgViewer("ImageViewer");
}
}





문]
이게 만든 소스입니다. 그런데 이부분에서 이미지를 구현하는 부분이 메뉴바를 인식하지못해서
메뉴바를 나타내는 부분만큼 이미지가 잘리게 됩니다. 어떻게 수정해야 할까요?


No comments:

Post a Comment