SWING(UI)이란?
: java에 프로그램 안에서 화면을 구성하는 것을 의미합니다.
● 특징
- 운영체제에 영향을 받지 않습니다.
- jvm 안에 기능이 탑제 되어있습니다.
- 클래스 이름이 J자로 시작합니다.
- 화려하고 다양한 컴포넌트로 쉽게 GUI 프로그래밍을 할 수 있습니다.
●컴포넌트/ 컨테이너
컴포넌트
: 버튼, 텍스트 상자, 레이블 상자, 옵션/체크박스등(윈도우 컴포넌트)
- 모든 스윙 컴포넌트는 javax.swing.JComponent를 상속
컴포넌트 예시)
컨테이너
: 컴포넌트를 담을 수 있는 클래스 - Frame, Panel(컨테이너 컴포넌트)
- java.awt.Container 상속
- 컨포넌트가 컨테이너에 탑재 되어야 UI 출력이 가능합니다.
UI 프로그램 샘플)
● 스윙 패키지 사용을 위한 import문
- import java.awt.*; 그래픽 처리를 위한 클래스들의 경로명
- import javax.swing.*; 스윙 컴포넌트 클래스들의 경로명
- import javax.swing.event.*; 스윙 이벤트를 위한 경로명
● 스윙 프레임
모든 스윙 컴포넌트를 담는 최상위 GUI 컨테이너
- JFrame을 상속받아 구현
- 컴포넌트가 화면에 보이려면 스윙 프레임에 부착되어야 합니다.
- 프레임을 닫으면 프레임 내의 모든 컴포넌트가 보이지 않게 됩니다.
스윙 프레임(JFrame) 기본 구성
프레임 – 스윙 프로그램의 기본 틀
메뉴바 – 메뉴들이 부착되는 공간
컨텐트 팬 – GUI 컴포넌트들이 부착되는 공간
// 컨테이너의 구조 형성(프로그램 시작과 동시에 ui 구현)
class ButtonTest extends JFrame{
ButtonTest(){
// 버튼, 레이블 객체 생성 (컴포넌트의 요소-> 자료형)
JButton male = new JButton("남자"); // 남자 버튼
JButton female = new JButton("여자"); // 여자 버튼
JLabel label = new JLabel("당신의 성별은?"); // 문자열을 출력
// Frame 컨테이너 객체 생성
Container container = getContentPane();
// 배치관리자 생성: 자동 컴포넌트 요소 배치
FlowLayout layout = new FlowLayout();
container.setLayout(layout);
// 컨테이너는 컴포넌트를 플로우 레이아웃에 맞추어 배치해준다.
// 컨테이너에 컴포넌트 추가 (.add)
container.add(male);
container.add(female);
container.add(label);
// 컨테이너의 제목, 크기, 종료, 보이기(출력)
setTitle("버튼 컴포넌트 테스트"); // 컨테이너 제목
setSize(300,100); // 컨테이너 크기(가로, 세로)
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 컨테이너 종료(안보이게만 되어 있던 기능 -> 완전 종료)
setVisible(true); // 컨테이너 보이기(출력)
}
}
public class Swing01 {
public static void main(String[] args) {
new ButtonTest();
}
}
Frame 컨테이너 객체 생성 (getContentPane())
Container container = getContentPane(); 안에서 new 해서 컨테이너를 만들어서 주소값을 return해줍니다. 최소 한개의 컨테이너가 생성이 되면 이 메서드를 통해서 new 하는 것이 아니라 하나의 컨테이너로 사용합니다.
(calender 컨셉 동일)
결과값
위의 결과에 추가적인 기능을 넣어보도록 하겠습니다. 남자, 여자의 버튼이 눌리면 단신의 성별은? 남자, 여자 로 출력되도록 하겠습니다.
이러한 추가적인 정보를 넣는 것을 컴포넌트에 이벤트 처리한다고 합니다.
- 이벤트란 : 특정 컴포넌트에서 발생하는 사건을 의미하며, 버튼의 클릭, 텍스트 상자에 커서가 들어오는 경우등을 예로 들 수 있습니다.
이벤트 처리 절차
1. 이벤트와 연관된 인터페이스를 사용하여 클래스 작성
2. 컴포넌트 객체 생성
3. 하단 객체에 리스너를 등록
4. 이벤트 처리할 처리 루틴을 작성
class ButtonEvent extends JFrame implements ActionListener{
JLabel result; // 생성자 밖에서도 사용하기 위해서 field에 선언
ButtonEvent(){
JButton male = new JButton("남자");
JButton female = new JButton("여자");
JLabel label = new JLabel("당신의 성별은?");
result = new JLabel();
Container container = getContentPane();
FlowLayout layout = new FlowLayout();
container.setLayout(layout);
container.add(male);
container.add(female);
container.add(label);
container.add(result);
// 이벤트 처리를 위한 버튼에 리스너 등록
male.addActionListener(this);
female.addActionListener(this);
setTitle("버튼 컴포넌트 테스트");
setSize(300,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
result.setText(e.getActionCommand());
}
}
public class ButtonEvent_ {
public static void main(String[] args) {
new ButtonEvent();
}
}
위에 똑같은 코드에 implements ActionListener 다형성을 통한 오버라이딩으로 되어진 method를 통해서 이벤트를 구현하게 해줍니다.
male.addActionListener(this); 자신 객체 안에서 이벤트 처리의 동작을 처리해줍니다. 리스터 등록이 끝이 나면 actionPerformed(); method가 호출합니다.
female.addActionListener(this); 위의 코드와 동일한 처리를 해줍니다.
public void actionPerformed(ActionEvent e) { = (ActionEvent e) : java가 선언한 참조변수의 e 의 주소값을 불러옵니다.
버튼이 눌렸다 라는 의미로 해석하며, ActionListener 정의 되어 있는 추상메서드 : 다형성에 의한 오버라이딩 , 버튼이 눌렸을 때의 기능을 Method를 통해서 구현합니다. 메서드만 오버라이딩해서 기능만 정의가 된것이지 실질적인 이벤트 기능이 탑재 된 것이 아니므로 addActionListener(); 를 꼭 입력해야합니다.
결과값:
이미지 파일을 이용한 Swing 구현)
class JImageTest extends JFrame{
JImageTest(){
// ImageIcon ii = new ImageIcon("images/korea.gif"); ./ 뺀다고 해서 문제 되지 않는다.
ImageIcon ii = new ImageIcon("./images/korea.gif");
// (./) default 위치에서 시작하겠다.
// "버튼 이름" 과 이미지 아이콘으로 버튼 객체 생성
// 2. 버튼에 아이콘 삽입
JButton korea = new JButton("클릭", ii);
// 이미지를 넣을 때 ("입력할 text" , 이미지file);
Container container = getContentPane();
// method를 통해서 container 객체를 가져온다.
container.setLayout(new FlowLayout());
container.add(korea);
setTitle("대한민국");
setSize(500,180);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
public class JImage_ {
public static void main(String[] args) {
new JImageTest();
}
}
ImageIcon 참조변수 = new ImageIcon("./ 폴더명 / 파일이름" );
폴더의 위치 default 값:
지금 사용하고 있는 pakage 에 넣어주면 파일을 읽어옵니다.
결과값
'빅데이터 > JAVA' 카테고리의 다른 글
[JAVA] 이클립스, DB 연동 환경설정 (0) | 2020.05.26 |
---|---|
[JAVA] SWING (2) (0) | 2020.05.25 |
[JAVA] 네트워크(NETWORK) (0) | 2020.05.23 |
[JAVA] 스트림(Stream) (0) | 2020.05.20 |
[JAVA] Thread (0) | 2020.05.19 |