자바 GUI 스윙
- GUI
- 사용자가 편리하게 입출력 할 수 있도록 그래픽으로 화면을 구성하고, 마우스나 키보드로 입력 받을 수 있도록 지원하는 사용자 인터페이스
- AWT와 Swing 패키지
- AWT(Abstract Windowing Toolkit) 패키지
- 자바가 처음 나왔을 때부터 배포된 GUI 패키지, 최근에는 거의 사용하지 않음
- AWT 컴포넌트는 중량 컴포넌트(heavy weight component)
- AWT 컴포넌트의 그리기는 운영체제에 의해 이루어지며, 운영체제에 의 자원을 많이 소모하고 부담을 줌
- 운영체제가 직접 그리기 때문에 속도는 빠름
- Swing 패키지
- AWT 기술을 기반으로 작성된 자바 라이브러리
- 모든 AWT 기능 + 추가된 풍부하고 화려한 고급 컴포넌트
- AWT 컴포넌트를 모두 스윙으로 재작성. AWT 컴포넌트 이름 앞에 J자를 덧붙임
- 순수 자바 언어로 구현
- 스윙 컴포넌트는 경량 컴포넌트(light weight component)
- 스윙 컴포넌트는 운영체제의 도움을 받지 않고 직접 그리기 때문에 운영체제에 부담주지 않음
- 현재 자바의 GUI로 사용됨
- AWT(Abstract Windowing Toolkit) 패키지
- Swing Component
- JButton
- JLabel
- JTextField
- JCheckBox
- JRadioButton
- JTextArea
- JComboBox
- JSlider
- JPasswordField
- JSpinner
- JList
- JProgressBar
- JToolTip
- JMenu
- JDialog
- JApplet
- JScrollPane
- JFrame
- JTable
- JTree
- JEditorPane
- JTextPane
- JToolBar
- JTabbedPane
- JSplitPane
- 컨테이너
- 다른 컴포넌트를 포함할 수 있는 GUI 컴포넌트
- java.awt.Container를 상속받음
- 다른 컨테이너에 포함될 수 있음
- AWT 컨테이너 : Panel, Frame, Applet, Dialog, Window
- Swing 컨테이너 : JPanel JFrame, JApplet, JDialog, JWindow
- 다른 컴포넌트를 포함할 수 있는 GUI 컴포넌트
- 컴포넌트
- 컨테이너에 포함되어야 화면에 출력될 수 있는 GUI 객체
- 다른 컴포넌트를 포함할 수 없는 순수 컴포넌트
- 모든 GUI 컴포넌트가 상속받는 클래스 : java.awt.Component
- 스윙 컴포넌트가 상속받는 클래스 : javax.swing.JComponent
- 최상위 컨테이너
- 다른 컨테이너에 포함되지 않고도 화면에 출력되며 독립적으로 존재 가능한 컨테이너
- 스스로 화면에 자신을 출력하는 컨테이너 : JFrame, JDialog, JApplet
- 300×300 크기의 스윙 프레임 만들기
12345678910111213import javax.swing.*;public class MyFrame extends JFrame {MyFrame() {setTitle("300x300 스윙 프레임 만들기");setSize(300,300); // 프레임 크기 300x300setVisible(true); // 프레임 출력}public static void main(String[] args) {MyFrame frame = new MyFrame();}} - 3개의 버튼 컴포넌트를 가진 스윙 프레임 만들기
12345678910111213141516171819202122232425import javax.swing.*;import java.awt.*;public class ContentPaneEx extends JFrame {ContentPaneEx() {setTitle("ContentPane과 JFrame 예제"); // 프레임의 타이틀 달기setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container contentPane = getContentPane(); // 컨텐트팬 알아내기contentPane.setBackground(Color.ORANGE); // 오렌지색 배경 설정contentPane.setLayout(new FlowLayout()); // 컨텐트팬에 FlowLayout// 배치관리자 달기contentPane.add(new JButton("OK")); // OK 버튼 달기contentPane.add(new JButton("Cancel")); // Cancel 버튼 달기contentPane.add(new JButton("Ignore")); // Ignore 버튼 달기setSize(300, 150); // 프레임 크기 300x150 설정setVisible(true); // 화면에 프레임 출력}public static void main(String[] args) {new ContentPaneEx();}} - 배치 관리자 대표 유형 4 가지
- FlowLayout 배치관리자
- 컴포넌트가 삽입되는 순서대로 왼쪽에서 오른쪽으로 배치
- 배치할 공간이 없으면 아래로 내려와서 반복한다.
- BorderLayout 배치관리자
- 컨테이너의 공간을 동(EAST), 서(WEST), 남(SOUTH), 북(NORTH), 중앙
- (CENTER)의 5개 영역으로 나눔
- 5개 영역 중 응용프로그램에서 지정한 영역에 컴포넌트 배치
- GridLayout 배치관리자
- 컨테이너를 프로그램에서 설정한 동일한 크기의 2차원 격자로 나눔
- 컴포넌트는 삽입 순서대로 좌에서 우로, 다시 위에서 아래로 배치
- CardLayout
- 컨테이너의 공간에 카드를 쌓아 놓은 듯이 컴포넌트를 포개어 배치
- 컨테이너의 디폴트 배치관리자
- 컨테이너 생성시 자동으로 생성되는 배치관리자
- FlowLayout 배치관리자