프로그래밍 언어/JAVA

JButton, 버튼 컴포넌트

· 코딩마이데이

JButton

JButton은 버튼 컴포넌트(간단히 버튼)를 만드는데 이용됩니다. 레이블 컴포넌트가 문자열이나 이미지를 화면에 출력하는 용도로 사용되는 것이라면, 버튼은 사용자로부터 명령을 받기 위해 사용됩니다. 버튼을 마우스로 클릭하거나 키로 선택하면 Action 이벤트발생합니다.

 

버튼 컴포넌트 생성

버튼은 다음 생성자를 이용하여 생성합니다.

JButton() // 빈 버튼
JButton(Icon image) // 이미지 버튼
JButton(String text) // 문자열 버튼
JButton (String text, Icon image) // 문자열과 이미지를 가진 버튼

 

예를 들면 "hello" 문자열을 가진 버튼은 다음 코드로 생성합니다.

JButton btn = new JButton("hello");

 

이미지 버튼 만들기

JButton은 사용자의 버튼 조작에 대한 시각적 효과를 극대화하기 위해, 마우스 접은에 따라 모양이 다른 3개의 버튼 이미지를 출력할 수 있습니다. 3개의 이미지는 다음과 같으며, 버튼에는 작은 이미지는 다음과 같으며, 버튼에는 작은 이미지가 주로 사용되므로 아이콘으로도 불립니다.

 

normalIcon

버튼이 보통 상태에 있을 때 출력되는 디폴트 이미지로, 생성자나 JButton의 setIcon(Icon image)을 통해 설정합니다.

 

rolloverIcon

버튼 위에 마우스가 올라갈 때 출력되는 이미지로, JButton의 setRolloverIcon(Icon image)을 호출하여 설정합니다.

 

pressedIcon

버튼이 눌러져 있는 동안 출력되는 이미지로, JButton의 setPressedIcon(Icon image)을 호출하여 설정합니다.

 

이 3개의 이미지 아이콘을 JButton에 달아주기만 하면, JButton은 사용자의 버튼 조작에 따라 적절한 버튼 이미지를 출력합니다.

3개의 이미지(nomralIcon, rolloverIcon, pressedIcon)를 가진 버튼을 만들어봅시다. 이미지 레이블을 만들 때와 동일하게 다음과 같이 3개의 이미지를 읽어 들이고, JButton으로 버튼 컴포넌트를 생성합니다.

ImageIcon normalIcon = new ImageIcon("images/normalIcon.gif");
ImageIcon rolloverIcon = new ImageIcon("images/rolloverIcon.gif");
ImageIcon pressedIcon = new ImageIcon("images/pressedIcon.gif");

JButton button = new JButton("테스트 버튼", normalIcon); // normalIcon 달기
button.setRolloverIcon(rolloverIcon); // rolloverIcon 달기
button.setPressedIcon(pressedIcon); // pressedIcon 달기

 

이때 3개의 이미지 파일은 프로젝트 폴더 밑의 images 폴더에 있어야 합니다.

실제로는 normalIcon 이미지 하나먄 가진 디폴트 버튼을 많이 사용하는대, 실행 중에 디폴트 이미지를 변경하려면 다음과 같이 setIcon() 메소드를 호출하면 됩니다.

button.setIcon(new ImageIcon("images/newIcon.gif")); // 디폴트 이미지 생성

 

JButton을 이용한 버튼 만들기

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

public class ButtonEx extends JFrame {
    public ButtonEx() {
        setTitle("이미지 버튼 예제");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container c = getContentPane();
        c.setLayout(new FlowLayout());

        // 3개의 이미지를 파일로부터 읽어들인다.
        ImageIcon normalIcon = new ImageIcon("images/normalIcon.gif");
        ImageIcon rolloverIcon = new ImageIcon("images/rolloverIcon.gif");
        ImageIcon pressedIcon = new ImageIcon("images/pressedIcon.gif");

        // 3개의  이미지를 가진 버튼 생성
        JButton btn = new JButton("call~~", normalIcon); // normalIcon용 이미지 등록
        btn.setPressedIcon(pressedIcon); // pressedIcon용 이미지 등록
        btn.setRolloverIcon(rolloverIcon); // rolloverIcon용 이미지 등록
        c.add(btn);

        setSize(250, 150);
        setVisible(true);
    }

    public static void main(String[] args) {
        new ButtonEx();
    }
}

 

[실행 결과]

보통 상태에 있는 동안
마우스가 버튼 위에 올라간 경우
마우스가 눌러진 순간

 

버튼과 레이블의 정렬(Alignment)

버튼 컴포넌트의 레이블 컴포넌트는 정렬 기능을 이용하면, 컴포넌트 내에 문자열과 이미지의 위치를 조정할 수 있습니다. 정렬은 수평 정렬수직 정렬로 구분됩니다.

수평 정렬

수평 정렬은 왼쪽, 중앙, 오른쪽 정렬의 3가지로, JButton이나 JLabel의 다음 메서드를 이용하면 됩니다.

void setHorizontalAlignment(int align)

 

align: 정렬의 기준으로 지정하는 값으로 다음과 같습니다.

SwingConstants.LEFT, SwingConstants.CENTER, SWINGConstants.RIGHT

 

왼쪽 정렬을 하려면 다음 코드가 필요합니다.

contentPane.setLayout(new BorderLayout()); // 버튼으로 꽉 채우기 위해
ImageIcon normalIcon = new ImageIcon("images/normalIcon.gif");
JButton btn = new JButton("call~~", normalIcon);
btn.setHorizontalAlignment(SwingConstants.LEFT); // 버튼 안에서 이미지와 문자열의 왼쪽 정렬
contentPane.add(btn);

 

여기서 SwingConstants.LEFT 대신 SwingConstants.CENTER나 SwingConstants.RIGHT를 사용하면 중앙 정렬, 오른쪽 정렬을 할 수 있습니다.

 

수직 정렬

수작 정렬은 위쪽, 종앙, 아래쪽 정렬의 3가지로서, JButton이나 JLabel의 다음 메소드를 이용하면 됩니다.

void setVerticalAlignment(int align)

 

align: 정렬의 기준을 지정하는 값으로 다음과 같습니다.

SwingConstants.TOP, SwingConstants.CENTER, SwingConstants.BUTTON

contentPane.setLayout(new BorderLayout()); // 버튼으로 꽉 채우기 위해
ImageIcon normalIcon = new ImageIcon("images/normalIcon.gif");
JButton btn = new JButton("call~~", normalIcon);
btn.setVerticalAlignment(SwingConstants.TOP); // 버튼 안에서 이미지와 문자열의 위쪽 정렬
contentPane.add(btn);

 

앞의 코드에서 SwingConstants.TOP 대신 SwingConstants.CENTER니 SwingConstants.BOTTOM를 사용하면 중앙 정렬, 아래쪽 정렬을 할 수 있습니다.