Loading...

JAVA / / 2022. 2. 6. 15:40

자바 44강. BorderLayout, enum

반응형

 

JPanel의 디폴트 레이아웃인

BorderLayout의 속성을 더 알아보자.

 

BorderLayout에서

오버로딩 되어있는 생성자를 이용해서

프레임의 크기를 지정해준다.

 

super( )에 값을 넣어주지 않으면

디폴트 생성자를 찍지만,

값을 넣어줌으로써 오버로딩 된 생성자를 찍어준다.

 

package site.metacoding.ex13;

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JPanel;

import site.metacoding.ex13.constant.BorderConstant;

public class BorderLayoutEx01 extends MyFrame {

	public BorderLayoutEx01() {
		super(500, 500);

		JPanel panel = (JPanel) getContentPane();
		panel.setLayout(new BorderLayout()); // 생략가능!
		// 디폴트 레이아웃이 BorderLayout이라서 setLayout 해줄 필요 없음

		setVisible(true); // 화면에 그림 그리기, paint 메서드
	}

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

 

 

BorderLayout에서 컴포넌트를 추가해줄 때

방향을 지정해줄 수 있다.

 

panel.add(btnNorth, "North")

방향을 알려주는 것

 

방향은 동, 서, 남, 북, 가운데

5가지가 있다.

 

 

JButton btnEast = new JButton("동쪽");
JButton btnWest = new JButton("서쪽");
JButton btnSouth = new JButton("남쪽");
JButton btnNorth = new JButton("북쪽");
JButton btnCenter = new JButton("가운데");

panel.add(btnEast, "East");
panel.add(btnWest, "West");
panel.add(btnSouth, "South");
panel.add(btnNorth, "North");
panel.add(btnCenter, "Center");

 


add의 인수자리에 문자열을 넣으면 실수할 수 있으니까

상수로 지정해준다.

package site.metacoding.ex13.constant;

public class BorderConstant {
	public final static String NORTH = "North";
	public final static String SOUTH = "South";
	public final static String EAST = "East";
	public final static String WEST = "West";
	public final static String CENTER = "Center";
}

 

만들어준 상수를 이용해 실수하지 않도록 지정해주었다.

panel.add(btnEast, BorderConstant.EAST);
panel.add(btnWest, BorderConstant.WEST);
panel.add(btnSouth, BorderConstant.SOUTH);
panel.add(btnNorth, BorderConstant.NORTH);
panel.add(btnCenter, BorderConstant.CENTER);

 

우리가 직접 BorderConstant 클래스를 만들어줬지만

자바에서 사실 이미 다 만들어뒀다.

panel.add(btnEast, BorderLayout.EAST);
panel.add(btnWest, BorderLayout.WEST);
panel.add(btnSouth, BorderLayout.SOUTH);
panel.add(btnNorth, BorderLayout.NORTH);
panel.add(btnCenter, BorderLayout.CENTER);

 


 

상수로 지정해서 다 만들어뒀지만

역시나 실수할 것이라는 불안감은 사라지지 않는다.

 

인수 자리에 지정한 값(Left, Right) 말고

다른 값은 받을 수 없도록 만드는 방법이 있다.

 

 

package site.metacoding.ex13.enumerate;

public class EnumEx01 {

	public static void add(String direction) {
		//"Left", "Right"만 받아야 함
		if(direction.equals("Left") || direction.equals("Right")) {
			System.out.println("잘들어왔군");
		}else {
			System.out.println("너 잘못입력했어");
		}
	}
	
	public static void main(String[] args) {
		add("left");
	}

}

이런 실수 때문에 final이 나왔다.

 

 

인터페이스로 지정해보자.

package site.metacoding.ex13.enumerate;

interface Direction {
	// 인터페이스에 변수를 적으면 public static final이 생략되어 있는것임(문법)
	// static 하면 기울고, final 하면 진해짐
	String LEFT = "Left";
	String RIGHT = "Right";
}

public class EnumEx01 {

	public static void add(String direction) {
		//"Left", "Right"만 받아야 함
		if(direction.equals("Left") || direction.equals("Right")) {
			System.out.println("잘들어왔군");
		}else {
			System.out.println("너 잘못입력했어");
		}
	}
	
	public static void main(String[] args) {
		add(Direction.RIGHT);
	}

}

 

 

이렇게 해도 불안하다.

add("RIGHT")라고 적을 수도 있기 때문에,

이렇게 못 넣게 하기 위해 강제시키려면

enum을 사용해야 한다.

package site.metacoding.ex13.enumerate;

enum Way {
	Left, Right;
}

public class EnumEx02 {

	public static void add(Way way) {
		System.out.println(way);
	}

	public static void main(String[] args) {
		// add("Right"); // 스트링 타입이라 넣을 수 없음
		add(Way.Left);
	}
}

enum을 사용하면 Left, Right가 아닌

다른 값, 다른 타입을 넣으면 오류가 발생한다.

 

사용하는 방법도 간단하기 때문에 알아두자.

 

 

 

 

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

 

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

반응형