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 |