ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • java :: GUI 프로그래밍-2
    IT/Java & JSP & FW 2011. 12. 27. 12:48
     Event
    이벤트는 컴포넌트에 사용자가 어떤 사건을 발생시키는 것을 의미한다. 

    아래 3 단어가 뜻하는 것이 무엇인지 이해하자.
    이벤트소스 (Event Source)
    이벤트 (Event)
    이벤트처리 (Event Handler)

    Event 처리 절차
    1. java.awt.event.* 을 import 한다
    2. XXXListener 추상클래스 또는 인터페이스를 상속받는다.
    3. 상속받은 녀석으로부터 추상메소드를 오버라이딩한다
    4. 이벤트 소스와 핸들러를 연결해준다.
        EX) .addXXXListener()메소드사용
    5. 오버라이딩한 메소드에 처리코드를 구현한다.

    예제
    (FrameT.java)
    import java.awt.*;
    import java.awt.event.*;
    
    // 이벤트 추가를 위해 implements ActionListener를 상속받는다.
    public class FrameT extends Frame implements ActionListener {
    	
    	Button b1,b2,b3;
    	
    	public FrameT(){
    		BorderLayout dl=new BorderLayout();
    		
    		Panel p1=new Panel();
    		FlowLayout fl=new FlowLayout(FlowLayout.CENTER,10,10);
    		p1.setLayout(fl);
    		add(p1);
    		
    		//b1, b2, b3가 이벤트의 근원지이다.
    		b1=new Button("Left");
    		b1.setBackground(Color.red);
    		b2=new Button("Center");
    		b2.setBackground(Color.blue);
    		b3=new Button("Right");
    		b3.setBackground(Color.yellow);
    		
    		p1.add(b1);p1.add(b2);p1.add(b3);
    		
    		//나 자신이 이벤트를 가지고 있으므로 상대객체를 나 자신을 가르키는 this
    		b1.addActionListener(this);
    		b2.addActionListener(this);
    		b3.addActionListener(this);
    	}
    
    	@Override
    	public Insets insets() {
    		return new Insets(40,20,20,20);
    	}
    	
    	//클릭시 이벤트를 위한 설정
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		//연결이 잘 되었는지 확인
    		
    		Object obj=e.getSource();  //주소값을 이용해서 같은지 아닌지 판단하는 방법
    		String str=e.getActionCommand();  // Label의 값을 가져와서 비교하기 위함
    //		System.out.println("str:"+str);
    		if(obj==b1){
    			this.setBackground(Color.red);
    			FlowLayout f1=new FlowLayout(FlowLayout.LEFT,10,10);
    			this.setLayout(f1);
    		}else if(obj==b2){
    			this.setBackground(Color.blue);
    			FlowLayout f2=new FlowLayout(FlowLayout.CENTER,10,10);
    			this.setLayout(f2);
    		}else if(obj==b3){
    			this.setBackground(Color.yellow);
    			FlowLayout f3=new FlowLayout(FlowLayout.RIGHT,10,10);
    			this.setLayout(f3);
    		}
    		this.validate();  // 새로운 정열을 위한 검증
    	}
    	
    	public static void main(String[] args) {
    		
    		FrameT ft=new FrameT();
    		ft.setSize(300,300);
    		
    		Dimension dim=Toolkit.getDefaultToolkit().getScreenSize();
    		int x=(int)dim.width/2-150;
    		int y=(int)dim.height/2-150;
    		
    		ft.setLocation(x, y);
    		ft.setVisible(true);
    	}
    
    }
    
    예제
    (CallTest.java)
    import java.awt.*;
    import java.awt.event.*;
    
    public class CallTest extends Frame implements ActionListener{
    	
    	Button b1,b2;
    	Label l1,l2,l3;
    	TextField tf1,tf2,tf3;
    	
    	public CallTest(){
    		GridLayout gd=new GridLayout(4,2);
    		this.setLayout(gd);
    		l1=new Label("first number");tf1=new TextField("");
    		l2=new Label("second number");tf2=new TextField("");
    		l3=new Label("Result");tf3=new TextField("0");
    		tf3.setEditable(false);
    		b1=new Button("call");b2=new Button("Reset");
    		add(l1);add(tf1);
    		add(l2);add(tf2);
    		add(l3);add(tf3);
    		add(b1);add(b2);
    		
    		b1.addActionListener(this);
    		b2.addActionListener(this);
    	}
    
    	@Override
    	public Insets insets() {
    		return new Insets(40,20,20,20);
    	}
    	
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		Object obj=e.getSource();
    		if(obj==b1){
    			int i=Integer.parseInt(tf1.getText())+Integer.parseInt(tf2.getText());
    			//tf3.setText((new Integer(i).toString()));  //정석
    			tf3.setText(""+i);  //꼼수로 int 형을 문자열을 붙여서 String으로 바꾸기
    		}else if(obj==b2){
    			String i="0";
    			tf3.setText(i);
    			String j=" ";
    			tf1.setText(j);
    			tf2.setText(j);
    		}
    		this.validate();
    	}
    	
    	public static void main(String[] args){
    		CallTest call=new CallTest();
    		call.setSize(300, 300);
    		
    		Dimension dim=Toolkit.getDefaultToolkit().getScreenSize();
    		
    		int x=(int)dim.width/2-150;
    		int y=(int)dim.height/2-150;
    		
    		call.setLocation(x, y);
    		call.setVisible(true);
    	}
    
    }
    

    메뉴바 생성 예제
    (MenuTest.java)
    import java.awt.*;
    import java.awt.event.*;
    
    public class MenuTest extends Frame implements ActionListener{
    
    	MenuBar mb;
    	Menu m_file;
    	MenuItem mi_load, mi_save, mi_close;
    	
    	public MenuTest(){
    		mb=new MenuBar();  //윈도우는 이미 일정영역이 메뉴바로 할당이 되어 있다
    		this.setMenuBar(mb);  //컴포넌트를 붙이듯이 add 대신에 set으로 부착해준다.
    		
    		m_file=new Menu("파일");
    		mb.add(m_file);
    		
    		mi_load=new MenuItem("열기");
    		mi_save=new MenuItem("저장");
    		mi_close=new MenuItem("닫기");
    		
    		m_file.add(mi_load);
    		m_file.add(mi_save);
    		m_file.addSeparator();  //구분선 넣기
    		m_file.add(mi_close);
    		
    		mi_load.addActionListener(this);
    		mi_save.addActionListener(this);
    		mi_close.addActionListener(this);
    	}
    	
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		
    		Object obj=e.getSource();
    		if(obj==mi_load){
    			FileDialog fd=new FileDialog(this,"파일열기",FileDialog.LOAD);
    			fd.setVisible(true);
    			System.out.println(fd.getDirectory());
    			System.out.println(fd.getFile());
    		}else if(obj==mi_save){
    			FileDialog fd=new FileDialog(this,"파일저장",FileDialog.SAVE);
    			fd.setVisible(true);
    		}else if(obj==mi_close){
    			System.exit(0);
    		}
    		
    	}
    	
    	public static void main(String[] args) {
    		
    		MenuTest mt=new MenuTest();
    		mt.setSize(300,300);
    		mt.setVisible(true);
    	}
    }
    


Designed by Tistory.