본문 바로가기

Today I Learned

자바 GUI 기초 - JButton

JButton

 

자바의 JButton은 버튼 컴포넌트이다.

클릭했을 때 이벤트를 발생시키는 액션 리스너를 달 수 있다.

또한 여러가지 함수들을 제공한다

 

먼저 JFrame을 상속받은 MyFrame을 만들고 ActionListener를 implements 했다.

그러면 반드시 구현해줘야 하는 actionPerformed() 함수가 생긴다.

public class MyFrame extends JFrame implements ActionListener {
	
	JButton button = new JButton();
	
	MyFrame() {
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLayout(null);
		this.setSize(500,500);
		
		this.add(button);
		
		this.setVisible(true);

	}
    
@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == button) {
			System.out.println("log");
    }

actionPerformed() 안에 버튼을 클릭했을때 발생시킬 이벤트를 담을 수 있다.

간단하게 "log"를 콘솔창에 찍어보도록 작성해보았다.

		button.setBounds(200,100,300,350);
		button.addActionListener(this);

위와 같이 버튼을 만들어주고, 액션 리스너를 달아주고

프레임에 버튼을 add() 해준다.

 

참고로 아래와 같은 방법으로  ActionListener() 메소드를 오버라이딩 하지 않고 Button에 ActionListener 달 수 있다.

		JButton button = new JButton();
        	button.addActionListener(e -> System.out.println("log"));

 

JButton는 다양한 함수를 가지고 있다.

		button.setBounds(200,100,300,350); //버튼의 위치와 크기 
		button.addActionListener(this); //버튼에 액션리스너 달기
		button.setText("i'm a button"); //버튼에 텍스트 넣기
		button.setFocusable(false); //포커스 제거
		button.setIcon(icon); //아이콘 추가하기
		button.setHorizontalTextPosition(JButton.CENTER); //버튼의 텍스트 위치
		button.setVerticalTextPosition(JButton.BOTTOM); //버튼의 텍스트 위치
		button.setFont(new Font("Comic sans", Font.BOLD,25)); //텍스트 폰트
		button.setIconTextGap(-15); //텍스트와 아이콘 사이의 차이
		button.setForeground(Color.cyan); //버튼 텍스트의 색상
		button.setBackground(Color.LIGHT_GRAY); //버튼의 배경 색상
		button.setBorder(BorderFactory.createEmptyBorder()); //테두리 제거

 

 

ImageIcon icon = new ImageIcon("rabbit.png");

ImageIcon으로 rabbit 아이콘을 컴포넌트를 만들고

버튼에 setIcon 해주었다.

여기서 만약 actionPerformed() 에 setEnabled을 false를 하면

버튼을 한번 클릭하고 나면 사용할수 없게 만들 수 있다.

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == button) {
			button.setEnabled(false); //사용할 수 없게
		}
		
	}

 

 

여기서 만약 레이블을 추가하고, 버튼을 클릭했을 때 옆에 레이블이 나타나게 만들 수도 있다.

먼저 생성자 위에 컴포넌트 레이블을 추가하고 settext로 쓰고 싶은 문구를 넣는다

 

처음에는 label.setVisible을 false로 한다.

JLabel label = new JLabel();

MyFrame() {
label.setText("rabbit dead");
label.setBounds(150,250,150,150);
label.setFont(new Font("Comic sans", Font.BOLD,25));
label.setForeground(Color.red);
label.setVisible(false);

}

그리고 버튼이 클릭되었을 때 label.setVisible을 true로 한다.

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == button) {
			button.setEnabled(false); //사용할 수 없게
			label.setVisible(true);
		}
		
	}

 

버튼을 클릭하면 오른쪽과 같이 문구가 나타난다.