게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[자바 AWT] 하아...Panel에 그린게 없어져요 ㅜ
게시물ID : programmer_1172짧은주소 복사하기
작성자 : 글냥이
추천 : 0
조회수 : 952회
댓글수 : 3개
등록시간 : 2014/02/12 23:41:59
import java.awt.*; 
import java.awt.event.*; 

public class ImageFiltering 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) { 
        ImageFiltering ifr = new ImageFiltering("Image Filtering Test"); 
    } 
     
    // 생성자 
    ImageFiltering(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(600600); 
         
        // 메뉴바 만들고, 이벤트 리스너도 등록하고 
        _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(100100); 
        setSize(600600); 
        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, 00, img_panel); 
        } 
    } // 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(ImageFiltering.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 



이미지파일을 가져와서요
버튼을 누르면 필터링작업을 시키고 저장하는 프로그램을 만들려고 해요 (연습용이에요).
근데 이거....파일 불러오는 것도 두 번은 불러와야 이미지가 화면에 뜨구요...
그마저도 화면크기 좀만 조절시켜도 화면이 다시 하얘지고 그래요 ㅜㅜ
이미지를 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(100100); 
        setSize(600600); 
        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, 00this); 
        } 
    } // 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 
꼬릿말 보기
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호