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
메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9