Java/Excercise

callback ch01 CallbackBtnAction

낭구리 2021. 9. 9. 19:31
package ch01;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

interface CallbackBtnAction {
	//추상메서드가 자동으로 입력
	public abstract void clickedAddBtn();
	public void clickedMinusBtn(); //abstract 생략가능
	//매개변수로 값전달(기본 데이터 타입, object 참조타입)
	public void passValue(int value);
}


//콜백받는 객체 : CallBackBtnAction 인터페이스를 구현해서 메서드를 사용한다.
class MainActivity extends JFrame implements CallbackBtnAction{
	int count;
	JLabel label;
	
	public MainActivity() {
		count = 0;
		label = new JLabel(count + "");
		setSize(300, 300);
		setLayout(new FlowLayout());
		add(label);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setVisible(true);
	}

	@Override
	public void clickedAddBtn() {
		System.out.println("+ 버튼 콜백받았습니다.");
//		플러스버튼 눌럿을때 더하기 버튼이 클릭되었습니다와 + 버튼콜백받았습니다가 동시에 출력
		count++;
		label.setText(count + "");
	}

	@Override
	public void clickedMinusBtn() {
		System.out.println("- 버튼 콜백받았습니다.");
		count--;
		label.setText(count + "");
	}

	@Override
	public void passValue(int value) {
		label.setText("매개변수로 값 전달받음 : " + value);
	}
	
}
//콜리(호출자) : 콜백 받는 객체에 주소값을 알고있어야 어떠한 동작을 실행되었다고 알릴 수 있다.
class SubActivity extends JFrame implements ActionListener{
	JButton btnAdd;
	JButton btnMinus;
	JButton btnPassValue;
	
	
	CallbackBtnAction callbackBtnAction;
	
	public SubActivity(CallbackBtnAction callbackBtnAction) {
		this.callbackBtnAction = callbackBtnAction;
		setSize(300, 300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		btnAdd = new JButton("더하기버튼");
		btnMinus = new JButton("빼기버튼");
		btnPassValue = new JButton("값 전달하기");
		setVisible(true);
		setLayout(new FlowLayout(FlowLayout.CENTER,50,50));
		add(btnAdd);
		add(btnMinus);
		add(btnPassValue);
		btnAdd.addActionListener(this); //액션리스너 대기중(이벤트기다리는)
		btnMinus.addActionListener(this); 
		btnPassValue.addActionListener(this);
		
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		JButton targetBtn = (JButton)e.getSource(); //오브젝트타입으로 호출
//		JButton으로 형변환
		if(targetBtn.getText().equals(btnAdd.getText())) {
//			System.out.println("더하기 버튼이 클릭되었습니다.");
			//우리가 정의한 메서드 호출
			this.callbackBtnAction.clickedAddBtn();
		}else if(targetBtn.getText().equals(btnMinus.getText())){
			this.callbackBtnAction.clickedMinusBtn(); //callbackBtnAction 에 접근해서 clickedMinusBtn호출
		} else {
			this.callbackBtnAction.passValue(400);
		}
	}
}

//어떤 이벤트를 호출할 때 (콜리 또는 호출자) 
//콜백받는 객체 
//콜백은 인터페이스로 약속을 만들고 
//***실무
public class CallBackTest {
 
	public static void main(String[] args) {
		MainActivity mainActivity = new MainActivity(); //변수에 주소값담기
		new SubActivity(mainActivity); //인터페이스가 징검다리 역할을해서 연결시킴
	}
}

 

'Java > Excercise' 카테고리의 다른 글

callback ch03 Activity 상속받아 콜백  (0) 2021.09.09
callback 02 Activity 메서드를 이용한 콜백  (0) 2021.09.09
callback ch00 Main,SubActivity  (0) 2021.09.09
swing ch06 MiniAmongUs  (0) 2021.09.08
thread ch03 TerminateThread  (0) 2021.09.08