본문 바로가기

자바공부

자바 스윙 컴포넌트, swing component, 명품자바프로그래밍11장

728x90
반응형

* 스윙 컴포넌트의 이름은 모두 J로 시작된다. 그리고 모든 스윙 컴포넌트들은 반드시 JComponent를 상속받는다. 그러므로 JComponent에는 스윙 컴포넌트들의 공통적인 속성과 메소드가 들어 있다.

스윙 컴포넌트와 상속 구조

* JComponent는 추상 클래스이며 모든 스윙 컴포넌트들이 상속받는 많은 공통 메소드와 상수들을 구현하고 있다.

추상 클래스 :

1) 실체클래스들의 공통적인 부분 (변수, 메소드)를 추출해서 선언한 클래스

2) 실체성이 없고 구체적이지 않으므로 추상클래스는 객체를 생성할 수 없다. 

3) 추상클래스와 실체클래스는 상속관계이다.

 

* 컴포넌트의 모양과 관련된 메소드

void setForeground(Color) // 전경색 설정(글씨)
void setBackground(Color) // 배경색 설정
void setOpaque(boolean) // 불투명성 설정
void setFont(Font) // 폰트 설정
Font getFont() // 폰트 리턴

 

* 컴포넌트의 위치와 크기에 관련된 메소드

int getWidth() // 폭 리턴
int getHeight() // 높이 리턴
int getX() // x 좌표 리턴
int getY() // y 좌표 리턴
Point getLocationOnScreen() // 스크린 좌표상에서의 컴포넌트 좌표
void setLocation(int, int) // 위치 지정
void setSize(int, int) // 크기 지정

 

* 컴포넌트의 상태와 관련된 메소드

void setEnabled(boolean) // 컴포넌트 활성화/비활성화
void setVisible(boolean) // 컴포넌트 보이기/숨기기
boolean isVisible() // 컴포넌트의 보이는 상태 리턴

 

* 컨테이너를 위한 메소드

Component add(Component) // 자식 컴포넌트 추가
void remove(Component) // 자식 컴포넌트 제거
void removeAll() // 모든 자식 컴포넌트 제거
Component[] getComponents() // 자식 컴포넌트 리스트 리턴
Container getParent() // 부모 컨테이너 리턴
Container getTopLevelAncestor() // 최상위 부모 컨테이너 리턴

 

* ActionListener를 활용한 버튼 생성

package Ch11;

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class SwingAPIEx extends JFrame{
	Container contentPane;
	JButton b1, b2, b3, b4;
	
	SwingAPIEx(){
		setTitle("Swing 공통 메소드 예제");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		contentPane = getContentPane();
		contentPane.setLayout(new FlowLayout());
		
		// 위치와 크기 정보 버튼 생성 b1
		b1 = new JButton("위치와 크기와 정보");
		b1.addActionListener(new MyButtonListener());
		contentPane.add(b1);
		
		// 모양정보 버튼 생성 b2
		b2 = new JButton("모양 정보");
		b2.setOpaque(true);
		b2.setForeground(Color.magenta);
		b2.setBackground(Color.yellow);
		b2.setFont(new Font("고딕체", Font.ITALIC, 20));
		b2.addActionListener(new MyButtonListener());
		contentPane.add(b2);
		
		// 작동하지 않는 버튼 생성 b3
		b3 = new JButton("작동하지 않는 버튼");
		b3.setEnabled(false);
		b3.addActionListener(new MyButtonListener());
		contentPane.add(b3);
		
		// 숨기기/보이기 토글 버튼 생성
		b4 = new JButton("숨기기/보이기");
		b4.addActionListener(new MyButtonListener());
		contentPane.add(b4);
		
		setSize(250,200);
		setVisible(true);
	}
	class MyButtonListener implements ActionListener{
		public void actionPerformed(ActionEvent e) {
			Object source = e.getSource(); // 선택된 버튼 알아내기
			
			if(source == b1) {
				System.out.println("버튼의 위치와 크기");
				System.out.println("위치 = (" + b1.getX() + "," + b1.getY()+")");
				System.out.println("크기 = (" + b1.getWidth() + "," + b1.getHeight()+")");
				
				JPanel c = (JPanel)b2.getParent(); // 부모 컨테이너의 주소를 알아낸다. 부모는 컨텐트
				
				System.out.println("컨탠트팬의 위치와 크기");
				System.out.println("위치 = (" + c.getX() + "," + c.getY()+")");
				System.out.println("크기 = (" + c.getWidth() + "," + c.getHeight()+")");
			}
			else if(source == b2) {
				System.out.println("폰트 = " + b2.getFont());
				System.out.println("글자색 = " + b2.getForeground());
				System.out.println("배경색 = " + b2.getBackground());
			}
			else {
				if(b1.isVisible()) {
					b1.setVisible(false);
					b2.setVisible(false);
					b3.setVisible(false);
				} else {
					b1.setVisible(true);
					b2.setVisible(true);
					b3.setVisible(true);
				}
			}
		}
	}
	public static void main(String[] args) {
		new SwingAPIEx();
	}
}

반응형