package ch02;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Activity1 extends JFrame {
//implements 안쓰고 메서드를 사용해서
String name;
JPanel panel;
CallbackCheckPosition callbackCheckPosition = new CallbackCheckPosition() {
//내부 익명 클래스에 이름(callbackCheckPosition)을 지어주고 알에 주소값이 담김
//변수 선언과 동시에 초기화
@Override
public void checkPosition(int x, int y) {
System.out.println("x :" + x);
System.out.println("y :" + y);
}
};
public Activity1(String name) {
this.name = name;
initData();
setInitLayout();
}
private void initData() {
setTitle(name);
setSize(500, 500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
panel = new JPanel();
}
private void setInitLayout() {
setVisible(true);
add(panel);
panel.setBackground(Color.blue);
}
}
package ch02;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
//호출자 (콜리)
public class Activity2 extends JFrame {
String name;
JPanel panel;
CallbackCheckPosition callbackCheckPosition;
// 어디에 보내기 위해서 주소값이 필요한데 이때 인터페이스 활용
// 3시39
public void setCallbackCheckPosition(CallbackCheckPosition callbackCheckPosition) {
this.callbackCheckPosition = callbackCheckPosition;
}
public Activity2(String name) {
this.name = name;
initData();
setInitLayout();
addEventListener();
}
private void initData() {
setTitle(name); // 변수화 시켜줄것
setSize(500, 500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
panel = new JPanel();
}
private void setInitLayout() {
setVisible(true);
add(panel);
panel.setBackground(Color.yellow);
}
private void addEventListener() {
// 메서드가 사용한적이없다. 생성자안에 추가하기
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
callbackCheckPosition.checkPosition(x, y);
}
});
}
}
package ch02;
public interface CallbackCheckPosition {
public abstract void checkPosition (int x, int y);
}
package ch02;
public class MainTest {
public static void main(String[] args) {
Activity1 activity1 = new Activity1("액티비티1");
//맴버변수를 전달하기 1에서 2로
Activity2 activity2 = new Activity2("액티비티2");
//임플리먼트는 주소값만 전달하는 것이지만
//메서드를 사용해서 콜백연결하기
activity2.setCallbackCheckPosition(activity1.callbackCheckPosition);
//클릭은 액티2 에서했지만 좌표값은 액티1의 것을 사용
}
}
'Java > Excercise' 카테고리의 다른 글
callback ch04 CalendarMainTest (0) | 2021.09.09 |
---|---|
callback ch03 Activity 상속받아 콜백 (0) | 2021.09.09 |
callback ch01 CallbackBtnAction (0) | 2021.09.09 |
callback ch00 Main,SubActivity (0) | 2021.09.09 |
swing ch06 MiniAmongUs (0) | 2021.09.08 |