이미지파일을 가져와서요
버튼을 누르면 필터링작업을 시키고 저장하는 프로그램을 만들려고 해요 (연습용이에요).
근데 이거....파일 불러오는 것도 두 번은 불러와야 이미지가 화면에 뜨구요...
그마저도 화면크기 좀만 조절시켜도 화면이 다시 하얘지고 그래요 ㅜㅜ
이미지를 Panel에 띄우지 말고 Frame에 직접 띄우는 방식으로 고치면(아래 코드처럼 고치면) 대충 해결은 되는듯 보이는데요
Frame에 좀 더 많은 Panel을 넣을 생각이라서요...어떻게해서든 img_panel에다가 그림을 그려넣고싶어요 ㅜㅜ 어케 해야할까요 ㅜㅜ?
import java.awt.*;
import java.awt.event.*;
public class ImageFiltering3 extends Frame {
MenuBar _mb = null;
Menu _file = null;
MenuItem _new = null;
MenuItem _load = null;
MenuItem _saveAs = null;
// Panel img_panel = null;
Button b1 = null; Button b2 = null;
Button b3 = null; Button b4 = null;
Panel buttons = null;
FileDialog fd = null;
Toolkit tk = null;
Image img = null;
Image img_called = null;
Graphics gImg = null;
public static void main(String[] args) {
ImageFiltering3 ifr = new ImageFiltering3("Image Filtering Test");
}
// 생성자
ImageFiltering3(String title) {
// Frame을 상속받았으므로 super는 Frame
super(title);
// 일단 x버튼으로 종료시켜야 하니까....
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
we.getWindow().setVisible(false);
we.getWindow().dispose();
System.exit(0);
}
});
// 이미지를 보여줄 패널
// img_panel = new Panel();
// img = img_panel.createImage(600, 600);
// 메뉴바 만들고, 이벤트 리스너도 등록하고
_mb = new MenuBar();
_file = new Menu("File");
_new = new MenuItem("New");
_load = new MenuItem("Load");
_saveAs = new MenuItem("SaveAs...");
MenuItemHandler mih = new MenuItemHandler();
_new.addActionListener(mih);
_load.addActionListener(mih);
_saveAs.addActionListener(mih);
// 버튼을 만들고, 이벤트리스터도 등록하고
b1 = new Button("Filter1");
b2 = new Button("Filter2");
b3 = new Button("Filter3");
b4 = new Button("+");
ButtonHandler bh = new ButtonHandler();
b1.addActionListener(bh); b2.addActionListener(bh);
b3.addActionListener(bh); b4.addActionListener(bh);
// 이제 Frame에다가 붙여넣을거 붙여 넣고 고고고~
this.setMenuBar(_mb);
_mb.add(_file);
_file.add(_new);
_file.add(_load);
_file.add(_saveAs);
// add(img_panel, "Center");
buttons = new Panel();
buttons.add(b1); buttons.add(b2);
buttons.add(b3); buttons.add(b4);
add(buttons, "South");
setLocation(100, 100);
setSize(600, 600);
setVisible(true);
} // ImageFiltering(String title)
public void paint(Graphics g) {
if(img != null) {
// Image의 크기를 얻는다.
//int imgWidth = img.getWidth(this.img_panel); // getWidth(ImageObserver obj)
//int imgHeight = img.getHeight(this.img_panel); // getHeight(ImageObserver obj)
// 이미지를 img_panel 중앙에 출력
// gImg = img_panel.getGraphics();
// gImg.drawImage(img, 0, 0, img_panel);
g.drawImage(img, 0, 0, this);
}
} // paint(Graphics g)
// 메뉴아이템 이벤트 핸들러, New, Load, SaveAs....
class MenuItemHandler implements ActionListener {
public void actionPerformed(ActionEvent ae) {
if(ae.getSource() == _new) {
// 화면 비우기
} else if(ae.getSource() == _load) {
fd = new FileDialog(ImageFiltering3.this, "Load", FileDialog.LOAD);
fd.setVisible(true);
String fileName = fd.getDirectory() + fd.getFile();
tk = Toolkit.getDefaultToolkit();
img = tk.getImage(fileName);
repaint();
} else if(ae.getSource() == _saveAs) {
// 보이는 화면 그대로 저장.
}
}
} // class MenuItemHandler
// 버튼 이벤트 핸들러. 필터링 작업 실시.
class ButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent ae) {
if(ae.getSource() == b1) {
// 필터링 작업1
} else if(ae.getSource() == b2) {
// 필터링 작업2
} else if(ae.getSource() == b3) {
// 필터링 작업3
} else if(ae.getSource() == b4) {
// 효과 합치기.
}
}
} // class ButtonHandler
}