Daily coding

Java Basic : day 14 - AWT & SWING 5 : 버튼 Button 본문

Language/Java_basic

Java Basic : day 14 - AWT & SWING 5 : 버튼 Button

sunnnkim 2019. 12. 8. 14:49

AWT & SWING 5

 

 

 

Button
 
 resource (자원) : button, panel, textField ... 
  -> Handle(번호,자원들은 주소값을 가지고 있고 그 주소값으로 다룬다)
 

- 버튼에 액션을 추가하기

 

1) 클래스에 ActionListener 인터페이스를 상속하여  actionPerformed() 를 오버라이딩 해준다

--> 이럴 경우, 버튼 객체를 생성한뒤 반드시 addActionLisenter( this ) 메소드를 실행해야 한다.

 


   btn1 = new Button("버튼 one"); 

   btn1.setBounds(100, 160, 150, 30);
   btn1.addActionListener(this); // 버튼이 클릭 할 때 이 메소드가 동작이되도록 꼭 연결!! 

   add(btn1);
 
   btn2 = new Button("버튼 two");

   btn2.setBounds(300, 160, 150, 30);
   btn2.addActionListener(this); // 버튼이 클릭 할 때 이 메소드가 동작이되도록 꼭 연결!!

   add(btn2);

 

 

**** actionPerformed() 메소드는 ActionEvent 타입의 인자 e 를 받아들인다.

      버튼이 여러개일 때는 e의 getSource를 통해 Object 타입의 반환값을 받아 조건문으로 버튼의 액션을 나누거나 

      Button 타입의 객체로 형변환 한 다음 조건문으로 버튼의 액션을 나누면 된다.

ex)     

    public void actionPerformed(ActionEvent e) {

           1) Object obj = e.getSource;

  

           2) Button btn = (Button) e.getSource();

 

           if(btnTitle.equals("버튼 one")) {

                      label.setText("버튼 one이 클릭되었습니다");

           }

// 혹은

          if ( btn == btTwo )) {

                      label.setText("버튼  two가 클릭되었습니다");

                      // 리소스는 주소값으로 데이터가 이루어져있기 때문에 가능함

           }

   }

 

 

2) 버튼에 직접 ActionListener클래스를 생성하여 연결해주고 오버라이딩까지 하면 된다.

 

// 버튼이 한 두개 있을 때 사용하면 좋다.
 btn1 = new Button("버튼 one"); 
 btn1.setBounds(100, 160, 150, 30);
 btn1.addActionListener(new ActionListener() {
           // 인터페이스라 밑에 코드에 내가 원하는 처리만 입력하면 됨.
           @Override
           public void actionPerformed(ActionEvent e) {
                      label.setText("버튼 one이 클릭되었습니다");
           }
  });
add(btn1);
 

package day14.Lecture01_AWT.test5;

import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JOptionPane;

public class WindowTest extends Frame implements WindowListener, ActionListener {
	Label label;
	Button btn1, btn2;
	
	public WindowTest() {
		super("간단한 예제");
		setLayout(null);
		
		// Button
		/*
		 
		 resource(자원) : button, panel, textField ... 
		  -> Handle(번호,자원들은 주소값을 가지고 있고 그 주소값으로 다룬다)
		 
		 */
		
		label = new Label("레이블 ");
		label.setBounds(100,100,300,30);
		add(label);
		
		// 버튼이 여러개 있을 때
		/*
		 * btn1 = new Button("버튼 one"); btn1.setBounds(100, 160, 150, 30);
		 * btn1.addActionListener(this); // 버튼이 클릭 할 때 이 메소드가 동작이되도록 꼭 연결!! add(btn1);
		 * 
		 * btn2 = new Button("버튼 two"); btn2.setBounds(300, 160, 150, 30);
		 * btn2.addActionListener(this); // 버튼이 클릭 할 때 이 메소드가 동작이되도록 꼭 연결!! add(btn2);
		 */
		
		// 버튼이 한 두개 있을 때
		 btn1 = new Button("버튼 one"); 
		 btn1.setBounds(100, 160, 150, 30);
		 btn1.addActionListener(new ActionListener() {
			// 인터페이스라 밑에 코드에 내가 원하는 처리만 입력하면 됨.
			@Override
			public void actionPerformed(ActionEvent e) {
				label.setText("버튼 one이 클릭되었습니다");
			}
		});
		add(btn1);
		setBounds(0, 0, 640, 480);
		setVisible(true);
		
		addWindowListener(this);
	
	}
	
	
	
	@Override
	public void windowOpened(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowClosing(WindowEvent e) {
		System.exit(0);
	}

	@Override
	public void windowClosed(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowIconified(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowDeiconified(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowActivated(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void windowDeactivated(WindowEvent e) {
		// TODO Auto-generated method stub
		
	}

	
	
	// ActionListener (버튼 누르면 동작을 실행하기 위한 메소드)
	// actionPerformed()

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		JOptionPane.showMessageDialog(null, "버튼 클릭!");
		// 위처럼 작성하는 코드는 모든 버튼 눌렀을 때 동작한다.
		
		
		Button btn = (Button) e.getSource();
		String btnTitle = btn.getLabel();	// getLabel : 타이틀값 얻어옴
		if(btnTitle.equals("버튼 one")) {
			label.setText("버튼 one이 클릭되었습니다");
		}else if ( btnTitle.equals("버튼 two")) {
			label.setText("버튼  two가 클릭되었습니다");
		}
		
	}
	
	

}