스윙 컴포넌트 소개
스윙 프로그램으로 GUI 화면을 구성하는 방법은 두 가지입니다.
첫 번째, 컴포넌트 기반 GUI 프로그래밍입니다. 스윙 패키지에 주어진 GUI 컴포넌트를 이용하여 쉽게 GUI 프로그램을 작성할 수 있는 장점이 있지만, 자바 패키지에서 제공하는 GUI 컴포넌트의 한계를 벗어날 수 없습니다.
두 번째, 그래픽 기반 GUI 프로그래밍입니다. 선, 원 등의 도형과 이미지를 이용하여 그래픽을 직접 환경에 그립니다. 이 방법은 자바 패키지의 컴포넌트에는 없는 독특한 GUI를 구성할 수 있고 실행 속도가 빨라 게임 등에서 주로 사용됩니다.

하지만, 프로그래밍에 대한 개발자의 부담이 큰 단점이 있습니다. 많은 경우 이 두 방법으로 혼합하여 GUI 응용프로그램을 작성합니다.
스윙 컴포넌트의 상속 구조
스윙 컴포넌트는 JComponent를 상속받으며, 이름이 모두 J로 시작됩니다. 그러므로 JComponent에는 스윙 컴포넌트들이 상속받는 많은 공통 메소드와 상수들이 작성되어 있습니다.
스윙 컴포넌트의 공통 메소드
JComponent에는 모든 스윙 컴포넌트들이 상속받는 공통 메소드와 상수들이 작성되어 있기 때문에 GUI 프로그램 작성을 위해 JComponent의 메서드들을 알아두어야 합니다.
배경색, 전경색, 폰트
스윙 컴포넌트틔 c의 배경색, 전경색, 폰트를 다루는 코드는 다음과 같습니다.
c.setBackground(Color.YELLOW); // 컴포넌트의 배경색을 노란색으로 설정
c.setBackground(Color.MAGENTA); // 컴포넌트 c의 글자색을 마젠타로 설정
c.setFont(new Font("Arial", Font.ITALIC, 20)); // 20픽셀 이텔릭 Airal 체로 설정
위치와 크기
스윙 컴포넌트 c의 위치와 크기를 설정하는 코드는 다음과 같습니다. 이 코드는 배치관리자가 없는 컨테이너에서만 작동합니다.
c.setLocation(100, 200); // 컴포넌트 c를 (100, 200) 위치로 이동
c.setSize(100, 100); // 컴포넌트 c의 크기를 100x100 크기로 설정
스윙 컴포넌트 c의 위치와 크기는 다음과 같이 알 수 있습니다.
int y = c.getX(); int y = c.getY();
int w = c.getWidth(); int h = c.getHeight();
활성화/비활성화, 보이기/숨기기
setEnabled()로 활성화/비활성화, setVisible()로 보이기/숨기기를 할 수 있습니다.
c.setEnabled(false); // 컴포넌트 c가 작동하지 않게 함. 버튼의 경우 클릭해도 무반음
c.setVisible(false); // 컴포넌트 c가 화면에 보이지 않게 함
부모 컨텐이너 찾기
getParent()를 이용하면 컴포넌트 c가 담긴 부모 컨테이너를, getTopLevelAncestor()를 호출하면 최상위 컨테이너를 알아낼 수 있습니다.
Container c = c.getParent(); // 컴포넌트 c의 부모 컨테이너 알아내기
MyFrame frame = (MyFrame)c.getTopLevelAncester(); // c으 최상위 스윙 프레인 알아내기
컨테이너 c에서 자식 컴포넌트 child를 삭제하는 코드는 다음과 같습니다.
c.remove(child);
child를 제거된다고 바로 화면에서 사라지지 않습니다. 다음 코드가 필요합니다.
c.revalidate(); // 컨테이너 c의 재배치.
c.repaint(); // 컴포넌트 c의 다시 그리기
스윙 컴포넌트의 공통 기능, JComponent의 메서드
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JComponentEx extends JFrame {
public JComponentEx() {
super("JComponent의 공통 메소드 예제");
Container c = getContentPane();
c.setLayout(new FlowLayout());
JButton b1 = new JButton("Magenta/Yellow Button");
JButton b2 = new JButton(" Disabled Button ");
JButton b3 = new JButton("getX(), getY()");
b1.setBackground(Color.YELLOW); // 배경색 설정
b1.setForeground(Color.MAGENTA); // 글자색 설정
b1.setFont(new Font("Arial", Font.ITALIC, 20)); // Arial. 20픽셀 폰트 설정
b2.setEnabled(false); // 버튼 비활성화
b3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton b = (JButton) e.getSource();
JComponentEx frame = (JComponentEx) b.getTopLevelAncestor();
frame.setTitle("x: " + b.getX() + "," + b.getY()); // 타이틀에 버튼 좌표 출력
}
});
c.add(b1); c.add(b2); c.add(b3); // 컨텐트팬에 버튼 부착
setSize(260, 200);
setVisible(true);
}
public static void main(String[] args) {
new JComponentEx();
}
}
[실행 결과]


'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| JButton, 버튼 컴포넌트 (1) | 2025.06.25 |
|---|---|
| JLabel, 레이블 컴포넌트 (0) | 2025.06.23 |
| MouseEvent와 MouseListener, MouseMotionListener, MouseWheelListener (1) | 2025.06.17 |
| KeyEvent와 KeyListener (1) | 2025.06.14 |
| 어댑터(Adapter) 클래스 (1) | 2025.06.11 |