■ 공통부분
- 윈도우창이기에 컨테이너는 JFrame을 사용한다.
- 아래의 예제들에서 JFrame의 세팅값(위치/크기/보임상태/종료버튼방식)은 모두 동일하게 할 것이다.
■ BorderLayout
- JFrame컨테이너의 디폴트 배치관리자는 BorderLayout이다.
- BorderLayout은 컴포넌트 간격을 지정하지 않을 거면 초기화를 딱히 해줄게 없다.
- 컴포넌트를 넣어줄 때 어느 영역(North/South/West/East/Center)에 위치시킬지 지정해준다.
package window;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class BorderLayoutTest extends JFrame{
BorderLayoutTest(){
//JFrame의 기본 세팅 메소들
this.setTitle("BorderLayout Test");
this.setLocation(200,200);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//버튼 컴포넌트를 5개 추가 - add()
//[레이아웃] 디폴트로 BorderLayout으로 설정되어 있음
//[1] 먼저 버튼 객체부터 생성한다.
// **버튼 생성메소드 JButton("버튼 안에 들어갈 문자열")
// 이미지나 아이콘도 넣을 수 있다.
JButton jbtNorth = new JButton("NORTH");
JButton jbtSouth = new JButton("SOUTH");
JButton jbtWest = new JButton("WEST");
JButton jbtEast = new JButton("EAST");
JButton jbtCenter = new JButton("CENTER");
//[2] 버튼을 컨테이너에 넣어둔다. **이때, 버튼이 들어갈 위치를 지정한다.
this.add(jbtNorth,BorderLayout.NORTH);
this.add(jbtSouth,"South");
this.add(jbtWest,BorderLayout.WEST);
this.add(jbtEast,"East");
this.add(jbtCenter); //생략시 디폴트 CENTER로 지정
//[유의점] 버튼 컴포넌트들을 먼저 JFrame에 넣어주고 JFrame 사이즈를 잡아줘야 한다.
// why? BorderLayout에서는 윈도우창 크기에 따라서 버튼의 너비가 자동 설정되기 때문.
this.setSize(400,400);
}
public static void main(String[] args) {
new BorderLayoutTest();
}
}
>> 실행 결과
■ FlowLayout
- JFrame컨테이너의 디폴트 배치관리자는 BorderLayout이다.
- Container의 setLayout() 메소드를 사용해서 레이아웃을 FlowLayout으로 변경한다.
*레이아웃도 객체이기 때문에 레이아웃 객체 생성을 먼저 해줘야한다.
- FlowLayout을 생성할 때 컴포넌트들의 정렬방식과 수평/수직 간격을 초기화해준다.
*기본적으로 최상단부터 나열시키는데, 정렬방식은 그의 좌(LEADING), 중간(CENTER), 끝(TRAILING) 중 하나를 고를 수 있다.
package window;
import java.awt.FlowLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class FlowLayoutTest extends JFrame{
FlowLayoutTest() {
//JFrame 기본 세팅
this.setTitle("FlowLayout Test");
this.setLocation(400,400);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
//Container 레이아웃 변경
//[참고] setLayout()의 매개변수는 LayoutManager 인터페이스다.
//[생성시] 정렬방식, 수직/수평간격 지정
this.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));;
//컴포넌트들을 생성해서 넣어준다.
JLabel label = new JLabel("Select Language");
this.add(label);
String[] comLang = {"Java","C","C++","PHP","Javascript","python"};
JComboBox<String> comLangBox = new JComboBox<String>(comLang);
comLangBox.setSelectedIndex(0);
this.add(comLangBox);
this.setSize(400,400);
}
public static void main(String[] args) {
new FlowLayoutTest();
}
}
>> 실행결과
■ GridLayout
- Container의 setLayout() 메소드를 사용해서 레이아웃을 GridLayout으로 변경한다.
*이번에도 레이아웃 객체생성을 먼저한다.
- Grid레이아웃을 생성할 때, 행/열 갯수, 수평/수직 간격을 초기화한다.
- Grid는 행을 우선으로 해서 컨포넌트들의 열의 너비를 지정하므로 이점을 유의한다.
package window;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class GridTest extends JFrame{
public GridTest() {
super("GridLayout Test");
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocation(200,200);
//Grid로 레이아웃 변경
GridLayout g = new GridLayout(3,3,10,10);
this.setLayout(g);
//컴포넌트 생성, 추가
for(int i = 0; i < 10; i++) {
JPanel jp1 = new JPanel();
jp1.add(new JLabel("PANEL"));
jp1.setSize(30,30);
Color c = new Color(0xfe9cc3);
jp1.setBackground(c);
this.add(jp1);
}
setSize(400,400);
}
public static void main(String[] args) {
new GridTest();
}
}
>> 실행 결과
■ CardLayout
- JFrame 윈도우창의 디폴트 BorderLayout배치는 그대로 둔다.
- 윈도우 창 상단에 패널+버튼들로 탭을 만든다. *패널 - FlowLayout
- 윈도우 창 하단에 패널+패널들로 카드를 만든다. *패널 - CardLayout
*묶어주는 안에 카드를 넣을 때는, 문장열로 카드명을 지정한다.
package window;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class CardTest extends JFrame{
public CardTest(){
super("GridLayout Test");
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocation(200,200);
//메뉴상단만들기
JPanel menu = new JPanel(new FlowLayout(FlowLayout.CENTER, 20, 20));
JButton jbt1 = new JButton("< Previous");
JButton jbt2 = new JButton("CARD");
jbt2.setBackground(Color.MAGENTA);
JButton jbt3 = new JButton("Next >");
menu.add(jbt1);
menu.add(jbt2);
menu.add(jbt3);
this.add(menu,"North");
//카드 만들기
JPanel cardSet = new JPanel(new CardLayout());
cardSet.add(new Screen1(),"s1");
cardSet.add(new Screen2(),"s2");
cardSet.add(new Screen2(),"s3");
this.add(cardSet);
setSize(400,400);
}
public static void main(String[] args) {
new CardTest();
}
}
class Screen1 extends JPanel{
public Screen1(){
this.setLayout(new BorderLayout());
Color c = new Color(0xe43e22);
JLabel label = new JLabel("안녕!",JLabel.CENTER);
this.setBackground(c);
this.add(label,"Center");
}
}
class Screen2 extends JPanel{
public Screen2() {
this.setLayout(new BorderLayout());
Color c = new Color(0x1ab6a8);
JLabel label = new JLabel("잘 지냈어?",JLabel.CENTER);
this.setBackground(c);
this.add(label,"Center");
}
}
class Screen3 extends JPanel{
public Screen3() {
this.setLayout(new BorderLayout());
Color c = new Color(0x985396);
JLabel label = new JLabel("이번주 주말에 뭐해?",JLabel.CENTER);
this.setBackground(c);
this.add(label,"Center");
}
}
>> 실행 결과
'Language > Java' 카테고리의 다른 글
[자바API_AWT/Swing] 키보드 이벤트 구현하기 (0) | 2022.03.28 |
---|---|
[자바API_AWT/Swing] 버튼 이벤트 구현하기 (0) | 2022.03.28 |
[자바의정석_예제] 객체지향프로그래밍1 (0) | 2022.03.27 |
[자바의정석_예제] 조건문과 반복문 (0) | 2022.03.27 |
[자바API_AWT/Swing] 배치관리자와 레이아웃 종류 (0) | 2022.03.26 |