JAVA/GUI

[자바] JButton 만들기 + 클릭 이벤트

yujin0517 2021. 7. 14. 23:37

Button 5개 생성하여 동, 서, 남, 북, 중앙으로 배치하는 코드 작성하기

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

class MyLayout extends JFrame{  //JFrame 상속받기
	
	JButton button1;  //JButton 타입으로하고, 변수명을 button1로 선언함.
	JButton button2;  
	JButton button3;
	JButton button4;
	JButton button5;
	
	public MyLayout() {
		initData();
		setInitLayout();
	}
	private void initData() {
		this.setTitle("Button 위치 설정하기!!");    //제목 설정.
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //창 닫기 버튼 클릭 시, 창이 닫히게 함. 
		this.setSize(500, 500);   //창 크기 설정.
		
		button1 = new JButton("button1");  //객체 생성 및 버튼 text설정.
		button2 = new JButton("button2");
		button3 = new JButton("button3");
		button4 = new JButton("button4");
		button5 = new JButton("button5");
		
	}
	private void setInitLayout() {
		this.setVisible(true);  //true값을 넣어야 실행 시 창이 표시됨. 
		this.setLayout(new BorderLayout());  //setLayout을 선언해야 버튼이 창에 표시됨. 
        	//new하는 Layout은 다르게 설정할 수 있음.
        	//BorderLayout, GridLayout, NoLayout 등등..

		this.add(button1, BorderLayout.WEST);   //버튼을 창에 추가하여 위치를 설정
		this.add(button2, BorderLayout.EAST);
		this.add(button3, BorderLayout.SOUTH);
		this.add(button4, BorderLayout.NORTH);
		this.add(button5, BorderLayout.CENTER);
		
	}
}

//////////////////////구분선///////////////////////////
public class BorderLayoutEx1 {

	public static void main(String[] args) {
		new MyLayout();  //메인 메소드에서 MyLayout 클래스 실행. 
        //이 코드가 없으면 true값을 넣어도 창이 뜨지 않음.
	}

}

실행 완료

 

  • JFrame을 상속받고, ActionListener를 인터페이스로 선언하여 버튼을 추가하고 클릭 이벤트를 줌
  • initData 메소드를 선언하여 button 객체를 생성하고, 버튼의 이름을 설정함
  • setInitLayout 메소드를 선언하여 버튼을 화면에 추가하고, 위치를 설정함

 

 

클릭 이벤트 추가

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

class MyLayout extends JFrame implements ActionListener {  

	JButton button1;
	JButton button2;
	JButton button3;
	JButton button4;
	JButton button5;

	public MyLayout() {
		initData();
		setInitLayout();
		addEventListener();
	}

	private void initData() {
		this.setTitle("Button 위치 설정하기!!");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(500, 500);

		button1 = new JButton("button1");
		button2 = new JButton("button2");
		button3 = new JButton("button3");
		button4 = new JButton("button4");
		button5 = new JButton("button5");

	}

	private void setInitLayout() {
		this.setVisible(true);
		this.setLayout(new BorderLayout());

		this.add(button1, BorderLayout.WEST);
		this.add(button2, BorderLayout.EAST);
		this.add(button3, BorderLayout.SOUTH);
		this.add(button4, BorderLayout.NORTH);
		this.add(button5, BorderLayout.CENTER);

	}

	private void addEventListener() {
		button1.addActionListener(this);  //버튼에서 일어나는 이벤트를 감지하는 코드
		button2.addActionListener(this);
		button3.addActionListener(this);
		button4.addActionListener(this);
		button5.addActionListener(this);

	}

	@Override
	public void actionPerformed(ActionEvent e) {
		JButton targetButton = (JButton) e.getSource();
       		//targetButton 변수를 선언하여 클릭되는 버튼을 변수에 대입
        	//여기서 다운캐스팅이 일어남.
        	//getSoutce는 object 타입(최상위 타입)이기 때문에 JButton 타입 변수에 대입하기 위해 다운캐스팅이 필요함.
        
		String text = targetButton.getText();  //버튼의 text(이름)를 String 변수에 넣어줌.
		if (text.equals(button1.getText())) {          
			System.out.println(text + "을 클릭함!!");
		} else if (text.equals(button2.getText())) {
			System.out.println(text + "을 클릭함!!");
		} else if (text.equals(button3.getText())) {
			System.out.println(text + "을 클릭함!!");
		} else if (text.equals(button4.getText())) {
        		System.out.println(text + "을 클릭함!!");
        	} else
			System.out.println(text + "을 클릭함!!");
        	//버튼의 text(이름)와 각각 버튼의 명이 같을 경우 콘솔창에 출력하는 조건문
	}
}
///////////////////////구분선/////////////////////////////
public class BorderLayoutEx1 {

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

실행 완료
버튼을 클릭할 때마다 콘솔창에 출력

 

  • JFrame을 상속받고, ActionListener를 인터페이스로 선언하여 버튼을 추가하고 클릭 이벤트를 줌
  • initData 메소드를 선언하여 button 객체를 생성하고, 버튼의 이름을 설정함
  • setInitLayout 메소드를 선언하여 버튼을 화면에 추가하고, 위치를 설정함
  • addEventListener 메소드를 선언하여 버튼 클릭을 감지함
  • actionPerformed 메소드를 오버 라이딩하여 버튼을 클릭할 때마다 콘솔 창에 버튼 이름을 출력함 

 

각 코드마다 자세한 설명은 코드 주석을 읽어주세요! 제가 공부하는 방식 그대로 설명해서 이해하기 힘든 부분도 있을 것 같습니다...

 

감사합니다!

2021.07.14

'JAVA > GUI' 카테고리의 다른 글

[자바] 콜백(CallBack) - JFrame  (0) 2021.07.19
[자바] JFrame 이미지 추가하기 - 슈퍼마리오(1)  (0) 2021.07.17
[자바] KeyListener  (0) 2021.07.15
[자바] JPanel  (0) 2021.07.15
[자바] Login 화면 구성하기  (0) 2021.07.13