-
[Java] swing프로그래밍/JAVA 2022. 8. 16. 12:34728x90
GUI(Graphical User Interface)는 그래픽을 이용하여 사용자에게 이해하기 쉽고 사용하기 쉬운 입출력 인터페이스를 의미하며 마우스나 키보드를 이용하여 직관적으로 입출력이 가능하다.
AWT는 Java1.0에 포함된 운영체제가 제공하는 네이티브 UI컴포넌트를 이용하는 자바 라이브러리로 자바 애플리케이션이 실행되는 운영체제에 따라 UI의 모양이 서로 모양이 다르고 종류도 제한적인 단점이 존재한다.
swing은 자바의 GUI(Graphic User Interface) 프로그래밍에 필요한 각종 킷을 모아놓은 것으로 GUI의 기능들을 구현할 수 있는 2D, Drag&Drop 등 을 지원한다. AWT와 달리 자바 프로그래밍 자체적인 컴포넌트이므로 플랫폼에 관계없이 모양이 동일하게 사용된다.
JFrame는 java swing 클래스의 일부로 윈도우 창을 만드는 컨테이너이다.
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); } }
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); } }
728x90'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] 크롤링(Crawling) (0) 2022.08.17 [Java] LocalDateTime (0) 2022.08.16 [Java] 소켓 통신(socket) (0) 2022.08.15 [Java] 람다 표현식(lambda expression) (0) 2022.08.15 [Java] 스레드 동기화(Thread Synchronization) (0) 2022.08.14