내부 클래스와 익명클래스 with GUI - 파워포인트 자료 살펴보기!
GUI - 그래픽이용, 사용자가 이해하기 쉬운 모양으로 정보 제공, 사용자는 마우스나 키보드를 이용하여 쉽게 입력
AWT - GUI 라이브러리
Swing - AWT 기술을 기반으로 순수 자바 언어로 만들어진 라이브러리
스윙 패키지에 들어있는 GUI 기본 샘플
JFrame - 기본 화면 구성
JTree - 탐색기 구성
JLabel - 이미지 출력
컨테이너 - 담아주는 역할, 다른 GUI 컴포넌트를 포함할 수 있는 컴포넌트
최상위 컨테이너 - 다른 컨테이너에 속하지않고 독립적으로 출력 가능한 컨테이너 예)JFrame
컴포넌트 - 컨테이너에 포함되어야 화면에 출력될 수 있는 순수 컴포넌트
내부 클래스(Inner Class)
한 클래스 내부에 작성하는 클래스
이런저런멤버들;
public(private) class InnerClass {
클래스문장들;
}
}
내부클래스에서 외부클래스의 모든 멤버의 접근이 용이하여 마음껏 활용할 수 있는 클래스를 작성할 수 있다.
(일종의 전용 부품 클래스를 내부에 작성하는 것)
익명 클래스(이름 없는 클래스)
모든 인스턴스는 클래스가 있어야 생성할 수 있다!
인터페이스로 새로운 클래스를 파생시킬 때 클래스의 이름 없이 바로 작성하여 인스턴스를 생성하는 방식
인스턴스 생성 문장에 직접 파생 클래스를 작성하는 것
GUI, 안드로이드 프로그래밍 등에서 이벤트 처리에 많이 사용됨.
추상클래스, 인터페이스를 사용하여 인스턴스를 생성할 때 사용하는 방식.
import javax.swing.*; //화면관련
import java.awt.*;
import java.awt.event.*;
//import java.awt.event.ActionEvent; 클릭
//import java.awt.event.ActionListener; 이벤트처리
// import문에 *은 패키지 내의 모든 클래스를 포함시킨다는 의미
public class GuiButtonEx extends JFrame {
// 기본적인 화면 구성 생성자로 처리
public GuiButtonEx() {
// 제목 표시줄에 타이틀 출력
setTitle("GUI 버튼 예제");
// 종료버튼 클릭 시 프로그램 종료
// 상수 public static final int EXIT_ON_CLOSE = 3;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 화면에 보여질 요소를 담는 컨테이너 생성
// 자동으로 최상위 컨테이너가 생성된 것을 패널로 쓰겠다고 가지고 오는 것
Container c = getContentPane();
//요소를 배치하는 레이아웃 설정 FlowLayout
c.setLayout(new FlowLayout()); // 익명 인스턴스
// 요소 화면에 추가 - 버튼
JButton btn1 = new JButton("Action"); //생성
c.add(btn1); //추가
// 이벤트 처리 인스턴스 생성
MyActionListener mal = new MyActionListener();
//버튼 이벤트 처리 인스턴스 넣기 - 연결하기
btn1.addActionListener(mal);
JButton btn2 = new JButton("Action2");
c.add(btn2);
// 이벤트 처리 인스턴스 생성 - 내부클래스 사용
// 제목변경 - 연걸하기
InnerActionListener ial = new InnerActionListener();
btn2.addActionListener(ial);
JButton btn3 = new JButton("Action3");
c.add(btn3);
// 익명 클래스로 이벤트 인스턴스 생성
btn3.addActionListener(new ActionListener() {
// btn3 전용의 객체(인스턴스)를 생성하는 익명 클래스
@Override
public void actionPerformed(ActionEvent e) {
JButton b = (JButton) e.getSource();
if(b.getText().equals("Action3")){
b.setText("액션3");
} else {
b.setText("Action3");
}
// 버튼 글자 바꾸기
// 생성자 안에서는 바로 사용 가능
setTitle(b.getText());
}
});
// 프로그램 창의 크기 설정
setSize(500, 200); //픽셀단위로 설정(너비, 높이)
// 윗 부분까지 메모리상에만 구현
// 꼭 필요! 모니터 프로그램 출력. 기본값 false
setVisible(true);
}
public static void main(String[] args) {
new GuiButtonEx();//Self Creat Instance 자기 자신 인스턴스 생성
} //main end
// 내부클래스로 이벤트 처리 객체 생성
private class InnerActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// 프로그램 제목을 바꿔보자
// this는 OutClass를 말한다.
GuiButtonEx.this.setTitle("제목변경");
}
}
}//class end
// 버튼 이벤트 처리용 객체(클래스) - 따로 작성하는 것이 기본
class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// 이벤트가 발생했을 때 그 이벤트에 대한 처리 명령을 작성하는 메소드
// ActionEvent 객체 : 이벤트가 발생된 요소의 정보와 어떤 이벤트인지의 정보를 가진 객체
JButton b = (JButton) e.getSource();
// 버튼 클릭시 버튼 이름 변경
if(b.getText().equals("Action")){
b.setText("Ready");
} else {
b.setText("Action");
}
}
}
file - project Structure - Artifacts - + - JAR - From modules with depen~ - ok
build - build Artifacts - build - 폴더 생성 - 폴더 파일 클릭하면 작성한 화면이 바로 출력
자바를 활용해 실제로 창을 만들어 띄워볼 수 있어서 재미있었다.
'공부기록' 카테고리의 다른 글
4월 21일 Java - 예외 처리2, 컬렉션 프레임워크 (0) | 2023.04.21 |
---|---|
4월 20일 Java - 예외 처리 (1) | 2023.04.20 |
4월 14일 - 주소록 프로그램 구현 (0) | 2023.04.14 |
2월 28일 영역별 레이아웃 만들기 정답 + 사이트 레이아웃 만들기 (0) | 2023.02.28 |
2월 27일 (2) 실습 + 반응형 웹 만들기 (0) | 2023.02.27 |