java day15
swing | 레이아웃 |
swing
GUI 프로그래밍 : 그래픽을 이용하여 사용자에게 이해하기 쉽고 사용하기 쉬운 입출력 인터페이스를 제공함. 마우스나 키보드를 이용하여 직관적으로 입력.
스윙(swing) : 자바의 GUI(Graphic User Interface) 프로그래밍에 필요한 각종 킷을 모아놓은 것으로 GUI의 기능들을 구현할 수 있는 2D, Drag&Drop 등 을 지원함. AWT 와 달리 자바 프로그래밍 자체적인 컴포넌트이므로 플랫폼에 관계없이 모양이 동일하게 사용됨.
JFrame : 윈도우 창을 만드는 java.awt.Frame을 계승한 컨테이너임.
그럼 윈도우 창을 만드는 코드를 살펴보자.
import javax.swing.*;
public class Swing1 {
public static void main(String[] args) {
JFrame jf1 = new JFrame();
jf1.setSize(400,400); // width, height
jf1.setVisible(true);
}
}
이때 setVisible()에 true를 넣게 되는데 setVisible()는 프레임을 보이게 할지 정해줄 수 있음.
다음으로 윈도우 창 내부에 버튼을 만드는 코드를 보자.
import javax.swing.*;
public class Swing1 {
public static void main(String[] args) {
JFrame jf1 = new JFrame();
JButton btn1 = new JButton("클릭하세요!"); // JButton를 사용하여 버튼을 생성할 수 있음.
btn1.setBounds(100,100,100,40); // 버튼의 위치 및 크기를 지정
jf1.add(btn1); // jf1에 버튼 추가
jf1.setSize(400,400); // width, height
jf1.setLayout(null);
jf1.setVisible(true);
}
}
setLayout()은 레이아웃을 정할때 사용하며 특정 레이아웃을 정하지 않았을때 null를 기입함.
레이아웃
FlowLayout : 레이아웃중 가장 기초적이고 자주 사용되는 레이아웃으로 컴포넌트를 왼쪽 상단부터 차례대로 정렬
import javax.swing.*;
import java.awt.*;
public class FlowLayout1 {
public static void main(String[] args) {
JFrame fr = new JFrame("플로우 레이아웃");
JPanel pn = new JPanel();
JButton[] bt = new JButton[10]; // 버튼 참조변수만 선언
FlowLayout fl = new FlowLayout();
fl.setAlignment(FlowLayout.LEFT); // 정렬 방법
pn.setLayout(fl); // 레이아웃 설정
for (int i = 0; i < bt.length; i++) {
bt[i] = new JButton("버튼" + i); // 버튼 객체 생성
pn.add(bt[i]); // 버튼을 패널로써 추가함.
}
fr.setContentPane(pn);
fr.setSize(500,500);
fr.setVisible(true);
}
}
JPanel은 가장 기초가 되는 메인 프레임인 JFrame의 보조 프레임으로 보면됨.
BorderLayout : 동서남북중, 총 5구역으로 나눠져 있으며, 한 구역에 하나의 panel 만 배치할 수 있음. 단, 레이아웃을 설정하지 않으면 기본(중)으로 사용
import javax.swing.*;
import java.awt.*;
public class BorderLayout1 {
public static void main(String[] args) {
JFrame fr = new JFrame("보더레이아웃");
JPanel pn = new JPanel();
JButton[] bt = new JButton[5];
BorderLayout bl = new BorderLayout();
pn.setLayout(bl);
for (int i = 0; i < bt.length; i++) {
bt[i] = new JButton("버튼" + i);
}
pn.add(bt[0], BorderLayout.NORTH);
pn.add(bt[1], BorderLayout.EAST);
pn.add(bt[2], BorderLayout.CENTER);
pn.add(bt[3], BorderLayout.WEST);
pn.add(bt[4], BorderLayout.SOUTH);
fr.setContentPane(pn);
fr.setSize(500,500);
fr.setVisible(true);
}
}
<br>
GridLayout : 격차처럼 사용할 수 있는 레이아웃. 총 사용가능한 그리드 수 보다 컴포넌트가 적거나 같아야함
import javax.swing.*;
import java.awt.*;
public class GridLayout1 {
public static void main(String[] args) {
JFrame fr = new JFrame("그리드 레이아웃");
JPanel pn = new JPanel();
JButton[] bt = new JButton[4];
GridLayout gl = new GridLayout(2,1);
pn.setLayout(gl);
for (int i = 0; i < bt.length; i++) {
bt[i] = new JButton("버튼" + i);
pn.add(bt[i]);
}
fr.setContentPane(pn);
fr.setSize(500,500);
fr.setVisible(true);
}
}