-
[JAVA]스윙 컴포넌트/JComponent/JLabel/button componentLanguages/Java 2021. 4. 24. 21:10반응형
GUI를 구성하는 2가지 방법
1.컴포넌트 기반 GUI 프로그래밍
스윙 패키지에 주어진 GUI 컴포넌트 이용
GUI 구성이 쉽다
자바 패키지에 제공하는 GUI 컴포넌트 한계
일반적인 GUI프로그램에 적합
2.그래픽 기반 GUI 프로그래밍
선,원,도형,이미지를 직접 그려낸 그래픽 화면 구성
개발자의 작업 부담 높음
자바 패키지에 없는 독특한 GUI 구성 가능
게임 등 자유로운 GUI
기초적인 스윙 컴포넌트와 상속 관계
Object
>>>
Component
>>>
Container
>>>
JComponent
>>>
AbstractButton JLabel JScrollBar JMenuBar , ...
>>>
...
스윙 컴포넌트의 공통 메소드, JComponent의 메소드
컴포넌트의 모양과 관련된 메소드
void setForeground(Color) 전경색 설정 void setBackground(Color) 배경색 설정 void setOpaque(boolean) 불투명성 설정 void setFont(Font) 폰트 설정 Font getFont() 폰트 리턴
컴포넌트 상태와 관련된 메소드
void setEnabled(boolean) 컴포넌트 활성화/비활성화 void set visible(boolean) 컴포넌트 보이기/숨기기 boolean isVisible() 컴포넌트의 보이는 상태 리턴
컴포넌트의 위치와 크기에 관련된 메소드
int getWidth() 폭 리턴 int getHeight() 높이 리턴 int getX() x 좌표 리턴 int getY() y 좌표 리턴 Point getLocationOnScreen() 스크린 좌표상에서의 컴포넌트 좌표 void setLocation(int, int) 위치 지정 void setSize(int, int) 크기 지정
컨테이너를 위한 메소드
component add(Component) 자식 컴포넌트 추가 void remove(Component) 자식 컴포넌트 제거 void removeALL() 모든 자식 컴포넌트 제거 Component[] getComponents() 자식 컴포넌 배열 리턴 container getparent() 부모 컨테이너 리턴 container getTopLevelAncestor() 최상위 부모 컨테이너 리턴
예제) 스윙 컴포넌트의 공통 기능, JComponent의 메소드
package project; import java.awt.*; import java.awt.event.*; import javax.swing.*; 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)); b2.setEnabled(false); b3.addActionListener((ActionListener) new ActionListener() { public void actionPerformed(ActionEvent e) { JButton b = (JButton)e.getSource(); JComponentEx frame = (JComponentEx)b.getTopLevelAncestor(); frame.setTitle(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(); } }
JLabel, 레이블 컴포넌트
JLabel의 용도
문자열이나 이미지를 컴포넌트화 하여 출력하기 위한 목적
생성자
JLabel() 빈 레이블 JLabel(Icon image) 이미지 레이블 JLabel(String text) 문자열 레이블 JLabel(String text,Icon image,int hAlign) 문자열과 이미지를 모두 가진 레이블 hAlign : 수평 정렬 값으로 SwingConstants.LEFT, SwingConstants.RIGHT,SwingConstants.CENTER 중 하나
컴포넌트 생성 예
단순 텍스트 만을 가진 레이블 컴포넌트 생성
JLabel textLabel = new JLabel("사랑합니다");
이미지를 가진 레이블 컴포넌트 생성
이미지 파일로부터 이미지를 읽기 위해 imageIcon 클래스 사용
다룰 수 있는 이미지 : png,gif,jpg
sunset.jpg의 경로명이 "images/sunset.jpg"인 경우
imegeIcon image = new ImageIcon("images/sunset.jpg"); JLabel imageLabel = new JLabel(image);
수평 정렬 값을 가진 레이블 컴포넌트 생성
텍스트 이미지 모두 출력하고자 하는 경우 수평 정렬 지정
ImageIcon image = new ImageIcon("imeges/sunset.jpg"); JLabel label = new JLabel("사랑합니다",image,SwingConstants.CENTER);
예제) JLabel을 이용한 레이블 만들기
package project; import javax.swing.*; import java.awt.*; public class LabelEx extends JFrame { public LabelEx() { setTitle("레이블 예제"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = getContentPane(); c.setLayout(new FlowLayout()); JLabel textLabel = new JLabel("사랑합니다."); ImageIcon beauty = new ImageIcon("images/beauty.png"); JLabel imageLabel = new JLabel(beauty); ImageIcon normalIcon = new ImageIcon("images/normallcon.png"); JLabel label = new JLabel("보고싶으면 전화하세요", normalIcon, SwingConstants.CENTER); c.add(textLabel); c.add(imageLabel); c.add(label); setSize(400,600); setVisible(true); } public static void main(String [] args) { new LabelEx(); } }
버튼 컴포넌트
버튼 모양의 컴포넌트
버튼을 선택하면 Action 이벤트 발생
생성자
JButton() 빈 버튼 JButton(Icon image) 이미지 버튼 JButton(String text) 문자열 버튼 JButton(String text, Icon image) 문자열과 이미지를 가진 버튼
버튼 컴포넌트 생성 예
"hello" 문자열을 가진 버튼 컴포넌트 생성 예
JButton btn = new JButton("hello");
이미지 버튼 만들기
하나의 버튼을 3개의 이미지 연결
마우스 접근에 따라 서로 다른 3개의 이미지 출력 가능
사용자의 버튼 조작에 대한 시각적 효과를 극대화
3개의 버튼 이미지
1.버튼의 보통 상태 때 출력되는 이미지
생성자에 이미지 아이콘 전달
이미지 설정 메소드 : JButton의 setIcon(icon image)
2.버튼에 마우스가 올라갈 때 출력되는 이미지
이미지 설정 메소드 : JButton의 setRolloverIcon(icon)
3. 버튼을 누그로 있는 동안 출력되는 이미지
이미지 설정 메소드 : JButton의 setPressedIcon(icon)
이미지 아이콘 생성
new ImageIcon(이미지 경로명);
예) new ImageIcon(images/normalIcon.gif);
예제)JButton을 이용한 버튼 만들기
package project; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class ButtonEx extends JFrame { public ButtonEx() { setTitle("이미지 버튼 예제"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container c = getContentPane(); c.setLayout(new FlowLayout()); ImageIcon normalIcon = new ImageIcon("images/normalIcon.jpg"); ImageIcon rolloverIcon = new ImageIcon("images/rolloverIcon.png"); ImageIcon pressedIcon = new ImageIcon("images/pressedIcon.png"); JButton btn = new JButton("call~~", normalIcon); btn.setPressedIcon(pressedIcon); btn.setRolloverIcon(rolloverIcon); JLabel IbText = new JLabel("메세지: "); btn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("버튼을 클릭했어욥"); IbText.setText("버튼을 클릭했어욥~~"); } }); c.add(btn); c.add(IbText); setSize(800,500); setVisible(true); } public static void main(String [] args) { new ButtonEx(); } }
레이블과 버튼의 정렬(Ailgnment)
수평 정렬 : 컴포넌트 내에 이미지와 텍스트의 수평 위치
void setHorizontalAligment(int align)
align : 정렬의 기준을 지정하는 값으로 다음과 같다.
SwingConstant.LEFT , SwingConstant.CENTER , SwingConstant.RIGHT
수직 정렬 : 컴포넌트 내에 이미지와 텍스트의 수직 위치
void setHorizontalAligment(int align)
align : 정렬의 기준을 지정하는 값으로 다음과 같다.
SwingConstant.TOP , SwingConstant.CENTER , SwingConstant.BOTTOM
반응형'Languages > Java' 카테고리의 다른 글