• GUI 구성이 쉽다.
• 스윙 패키지에 포함된 GUI 컴포넌트를 이용한다.
• 일반적인 GUI 프로그램에 적합하다.
• 작업 부담이 높다.
• 선, 원, 도형, 이미지 등을 직접 그려 그래픽 화면을 구성한다.
• 자유로운 GUI 프로그램에 적합하다.
void setForeground(Color) // 전경색 설정(앞쪽색)
void setBackground(Color) // 배경색 설정(뒤쪽색)
void setOpaque(boolean) // 불투명성 설정
void setFont(Font) // 폰트 설정
Font getFont() // 폰트를 리턴
void setEnabled(boolean) // 컴포넌트 활성화 설정
void setVisible(boolean) // 컴포넌트 보이기 설정
boolean isVisible() // 컴포넌트 보이기 상태를 리턴
int getWidth() // 가로 크기를 리턴
int getHeight() // 세로 크기를 리턴
int getX() // 컴포넌트의 x 좌표를 리턴
int getY() // 컴포넌트의 y 좌표를 리턴
void setLocation(int, int) // 컴포넌트의 위치를 설정
void setSize(int, int) // 컴포넌트의 크기를 설정
Component add(Component) // 자식 컴포넌트를 추가
void remove(Component) // 자식 컴포넌트를 제거
void removeAll(Component) // 모든 자식 컴포넌트를 제거
Container getParent() // 부모 컨테이너를 리턴
Container getTopLevelAncestor() // 최상위 부모 컨테이너를 리턴
Component[] getComponents() // 자식 컴포넌트 배열을 리턴
• 문자열이나 이미지를 컴포넌트화하여 출력하기 위해서 사용
JLabel() // 빈 레이블을 생성
JLabel(Icon image) // 이미지 레이블을 생성
// 예제
ImageIcon img = new ImageIcon("이미지 경로");
JLabel jLabel = new JLabel(img);
JLabel(String text) // 문자열 레이블을 생성
// 예제
JLabel jLabel = new JLabel("문자열 레이블 생성 예제");
JLabel(String text, Icon image, int hAlign)
// 문자열과 이미지를 모두 포함하는 레이블을 생성
// 예제
ImageIcon img = new ImageIcon("이미지 경로");
JLabel jLabel = new JLabel("텍스트 내용", img, SwingConstants.CENTER);
// CENTER, LEFT, RIGHT 중 하나로 설정
import awt.*;
import javax.swing.*;
public class JLabelExample extends JFrame {
public JLabelExample() {
super("JLabel 사용 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
JLabel textLabel = new JLabel("텍스트 레이블을 생성!");
ImageIcon img1 = new ImageIcon("이미지 경로");
// 이미지 경로에는 실제 경로를 작성
JLabel imgLabel = new JLabel(img);
ImageIcon img2 = new ImageIcon("이미지 경로");
// 이미지 경로에는 실제 경로를 작성
JLabel imgTextLabel = new JLabel("오라클", img2, SwingConstants.CENTER);
contentPane.add(textLabel);
contentPane.add(imgLabel);
contentPane.add(imgTextLabel);
setSize(480, 600);
setVisible(true);
}
public static void main(String[] args) {
new JLabelExample();
}
}
• 실행 결과
• 버튼 모양의 컴포넌트
• 버튼을 선택하면 Action 이벤트 발생
JButton() // 빈 버튼 생성
JButton(Icon image) // 이미지 버튼을 생성
// 예시
JButton("이미지 경로"); // 실제 경로를 입력
JButton(String text) // 문자열 버튼을 생성
// 예시
JButton("문자열을 입력");
JButton(String text, Icon image) // 문자열과 이미지 모두 포함하는 버튼을 생성
• 마우스 접근에 따라서 서로 다른 3개의 이미지를 출력 가능하다.
• 사용자의 버튼 조작에 따른 시각적 이미지를 부여할 수 있다.
버튼이 기본 상태일 경우 출력되는 이미지
• 생성자에 이미지를 전달
• JButton.setIcon(image) 메소드를 통해 이미지 설정
마우스가 버튼 위에 있을 경우 출력되는 이미지
• JButton.setRolloverIcon(image) 메소드를 통해 이미지 설정
마우스가 버튼을 누르고 있는 동안 출력되는 이미지
• JButton.setPressedIcon(image) 메소드를 통해 이미지 설정
• 수평 정렬 : 컴포넌트 내에 이미지와 텍스트의 수평 위치를 정렬
void setHorizontalAlignment(int align)
SwingConstants.(CENTER, LEFT, RIGHT) 중에 하나를 입력
• 수직 정렬 : 컴포넌트 내에 이미지와 텍스트의 수직 위치를 정렬
void setVerticalAlignment(int align)
SwingConstants.(TOP, CENTER, BOTTOM) 중에 하나를 입력
• 선택(selected)과 비선택(deselected) 두 가지 상태만 가진다.
• 이미지 아이콘을 가진 체크박스는 체크 박스 모양이 출력되지 않는다.
JCheckBox() // 빈 체크박스를 생성
JCheckBox(String text) // 문자열 체크박스를 생성
JCheckBox(String text, boolean selected) // 문자열 체크박스를 생성, 체크 상태를 설정
// 예제
JCheckBox jCheckBox = new JCheckBox("문자열 입력");
JCheckbox jCheckBox = new JCheckBox("문자열 입력", true);
JCheckBox(Icon image) // 이미지 체크박스를 생성
JCheckBox(Icon image, boolean selected) // 이미지 체크박스를 생성, 체크 상태를 설정
// 예제
JCheckBox("이미지경로");
JCheckBox("이미지경로", true);
JCheckBox(String text, Icon image) // 문자열과 이미지를 가지는 체크박스를 생성
JCheckBox(String text, Icon image, boolean selected)
// 문자열과 이미지를 가지는 체크박스, 체크 상태를 설정
• 체크 박스 모양이 출력되지 않는다.
• 선택 상태에 따라 표현하는 이미지 아이콘을 따로 설정해야 한다.
// 실사용에서는 실제 이미지 경로를 입력
ImageIcon normalIcon = new ImageIcon("normalIcon 이미지 경로");
ImageIcon selectedIcon = new ImageIcon("selectIcon 이미지 경로");
JCheckBox jCheckBox = new JCheckBox("예제", normalIcon);
jCheckBox.setSelectedIcon(selectedIcon);
• 체크박스 또는 라디오 버트의 선택 상태가 바뀔 때 발생하는 이벤트
JCheckBox jCheckBox = new JCheckBox("버튼");
jCheckBox.setSelected(true);
// 프로그램에서 선택 상태를 변경
• ItemListener 인터페이스의 추상 메소드
void itemStateChanged(ItemEvent e)
// 선택 또는 해제 상태가 변경되는 경우에 호출된다.
• ItemEvent의 주요 메소드
int getStateChange()
// 선택된 경우 ItemEvent.SELECTED를 리턴
// 해제된 경우 ItemEvent.DESELECTED를 리턴
Object getItem()
// 이벤트를 발생시킨 아이템 객체를 리턴
• 여러 버튼으로 그룹을 형성하고, 하나만 선택되는 버튼
• 다른 버튼을 선택 시, 그 전에 선택한 버튼은 자동으로 선택 해제
• 이미지를 가진 라디오버튼의 생성 및 다루기는 체크박스와 완전히 동일한다.
JRadioButton() // 빈 라디오버튼을 생성
JRadioButton(String text) // 문자열 라디오버튼을 생성
JRadioButton(String text, boolean selected)
// 문자열 라디오버튼을 생성, 체크 상태를 설정
JRadioButton(Icon image) // 이미지 라디오버튼을 생성
JRadioButton(Icon image, boolean selected)
// 이미지 라디오버튼을 생성, 체크 상태를 설정
JRadioButton(String text, Icon image)
// 문자열과 이미지를 포함하는 라디오버튼을 생성
JRadioButton(String text, Icon image, boolean selected)
// 문자열과 이미지를 포함하는 라디오버튼을 생성, 체크 상태를 설정
// 1. 버튼 그룹 객체를 생성한다.
ButtonGroup buttonGroup = new ButtonGroup();
// 2. 라디오버튼을 생성한다.
JRadioButton btn1 = new JRadioButton("btn1");
JRadioButton btn2 = new JRadioButton("btn2");
JRadioButton btn3 = new JRadioButton("btn3");
// 3. 생성한 라디오버튼을 버튼 그룹에 삽입한다.
buttonGroup.add(btn1);
buttonGroup.add(btn2);
buttonGroup.add(btn3);
// 4. 라디오 버튼을 컨테이너에 삽입
Container.add(btn1);
Container.add(btn2);
Container.add(btn3);
• 한 줄짜리 문자열(텍스트) 입력창을 구현한 컴포넌트이다.
• ENTER 키가 입력되면 Action 이벤트가 발생
• 입력 가능한 문자 개수와 입력 창의 크기는 서로 다른다.
JTextField() // 빈 텍스트필드를 생성
JTextField(int column) // 열의 개수가 column개인 텍스트필드를 생성
JTextField(String text) // text가 입력되어있는 텍스트필드를 생성
JTextField(String text, int column) // 열의 개수는 column개이며, text가 입력되어있는 텍스트필드를 생성
• 텍스트필드 내의 문자열을 편집하지 못하게 하는 메소드
• 텍스트필드의 입력 창에 문자열을 출력하는 메소드
• 텍스트필드 의 입력 창의 문자열의 폰트를 지정하는 메소드
import javax.swing.*;
import java.awt.*;
public class TextFieldExample extends JFrame {
public TextFieldExample() {
super("텍스트필드 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.add(new JLabel("이름"));
contentPane.add(new JTextField(30));
contentPane.add(new JLabel("주소"));
contentPane.add(new JTextField(30));
contentPane.add(new JLabel("번호"));
contentPane.add(new JTextField(30));
setSize(300, 200);
setVisible(true);
}
public static void main(String[] args) {
new TextFieldExaple();
}
}
• 실행 결과
• 여러 줄을 입력할 수 있는 텍스트 입력 창 컴포넌트
• JScrollPane 컴포넌트에 삽입 시 스크롤바를 지원
JTextArea() // 빈 텍스트영역을 생성
JTextArea(int rows, int columns) // rows x columns 크기의 텍스트영역을 생성
JTextArea(String text) // text 문자열이 입력된 텍스트영역을 생성
JTextArea(String text, int rows, int columns)
// 입력 창에 text가 입력되어있으며, rows x columns 크기의 텍스트영역을 생성
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TextAreaExample {
public TextAreaExample() {
super("TextArea 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.add(new JLabel("사용 가능한 언어를 입력하세요"));
JTextField textField = new JTextField(20);
contentPane.add(textField);
JTextArea textArea = new JTextArea(10, 20);
contentPane.add(new JScrollPane(textArea));
textField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JTextField inputField = (JTextField)e.getSource();
textArea.append(inputField.getText() + "\n");
inputField.setText("");
}
});
setSize(300, 300);
setVisible(true);
}
public static void main(String[] args) {
new TextAreaExample
}
}
• 실행 결과