ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA]스윙 컴포넌트/JComponent/JLabel/button component
    Languages/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

     

     

     

     

     

    반응형

    댓글

Designed by Tistory.