자바 창 만들기 - jaba chang mandeulgi

자바의 GUI Swing 의 튜토리얼이다. AWT GUI 이후 오늘날까지 사용되고 있는 Java의 GUI 프레임웤이다. AWT가 먼저나왔으니까 AWT GUI를 먼저 해보던 상관은 없다. Swing 이 훨씬 쓸만하도록 설계되어 있다.

물론 Swing도 나온지 오래되었지만 20년째 딱히 바뀌지 않는 윈도우 애플리케이션들을 보면 기본틀은 안정화 되었다.

Swing 이전의 AWT에 대하여 궁금하면 아래 링크를 참조한다.

자바 튜토리얼 (7-1) AWT GUI 윈도우 창 만들기

AWT는 자바 GUI의 시조새입니다. GUI에 대하여 쓴 포스팅을 분리했습니다. GUI 개념 설명입니다. https://digiconfactory.tistory.com/56 인터페이스는 무엇인가? GUI와 CUI와 UX와 UI *자바의 AWT관련 포스팅을..

digiconfactory.tistory.com

자바 창 만들기 - jaba chang mandeulgi
자바 창 만들기 - jaba chang mandeulgi
계층도

JFrame으로 윈도우창을 띄어보는 것부터 시작할 것이다. Swing은 자바의 JDK에 기본적으로 포함되어 있다. java.awt.Frame 를 상속하는데 awt의 Frame과는 약간의 호환성이 떨어진다. add ( ) , remove ( ) 등의 메소드들이 오버라이드 되었다.

컴포넌트 메소드 중에 자주 쓰이는 메소드는 add, setSize, setLayout,setVisible 등이 있다. 컴포넌트의 특성을 생각하면 많은 특성들이 공유될 것을 예상할 수 있다.

Swing을 이야기 할때 보통 AWT에 대한 비교를 많이한다. 자바 GUI의 구버전이기 때문에 그런 부분도 없지 않다. 같은 계열에서 비교해야지 좀더 차이가 난다. Swing의 기본적인 특성을 보면,

- 컴포넌트들은 플랫폼 독립적이다. OS마다 들쭉날쭉 하지 않다는 말이다.

- 컴포넌트가 AWT에 비하여 가벼워졌다. AWT는 OS(시스템콜)를 자주 호출하지만 SWING에서는 그럴 필요가 없다.

- pluggable look and feel 이 가능하다. 실행시간에 프로그래머가 커스터마이즈 세팅으로 외관을 바꿀 수 있다.

- 유용한 컴포넌트가 더 늘어났다.

- MVC 모델을 지원한다. (Model View Controller)

*JFrame의 javadoc은 아래와 같다.

JFrame (Java Platform SE 8 )

An extended version of java.awt.Frame that adds support for the JFC/Swing component architecture. You can find task-oriented documentation about using JFrame in The Java Tutorial, in the section How to Make Frames. The JFrame class is slightly incompatible

docs.oracle.com

JFrame을 만드는 방법은 여러가지가 있다. 이 포스트는 두개를 설명한다.

1) 외부클래스 사용

import javax.swing.JButton;
import javax.swing.JFrame;

public class SwingEX1 {

	public static void main(String[] args) {
		JFrame f1 =new JFrame();
		
		JButton b1 = new JButton("CLICK");
		b1.setBounds(100, 100, 100, 40);
		
		f1.add(b1);
		f1.setSize(300,400);
		f1.setLayout(null);
		f1.setVisible(true);
	}
}

버튼이 하나 달려있는 프레임(윈도우)이다. 실행하면

자바 창 만들기 - jaba chang mandeulgi

깔끔한 윈도우창이 열린다. 가운데는 버튼이다. 버튼은 컴포넌트의 하위클래스다.

import 문에서 javax.swing. 패키지에서 JFrame과 JButton을 가져온다. javax.swing.* 이렇게 패키지에서 모두 가져올 수도 있다.

먼저 JFrame 의 인스턴스를 생성한다. JButton 으로 가운데의 CLICK 버튼의 인스턴스를 생성하고 위치와 크기를 잡아준다. setBounds 에 상대위치 (좌측 상단에서 버튼까지의 거리)와 절대크기(버튼의 크기, 가로 x 세로)를 픽셀로 지정해준다. JFrame 의 인스턴스로 add(버튼의 인스턴스) 하고 나머지 설정 setSize - 윈도우의 사이즈 setLayout 레이아웃 관리자 없으면 null 이다. 마지막으로 setVisible(true)면 창을 그린다.

2) JFrame을 상속해서 사용

import javax.swing.JButton;
import javax.swing.JFrame;

public class SwingEX2 extends JFrame{
	
	SwingEX2(){
		JButton b1 = new JButton("CLICK");
		b1.setBounds(100, 100, 100, 40);
		
		add(b1);
		setSize(300,400);
		setLayout(null);
		setVisible(true);
	}

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

JFrame을 상속해서 사용하는 방법도 있다.

JFrame을 만드는 내용으로 생성자에 코드를 작성한다. 버튼은 외부클래스를 불러오는 것이니까 똑같다. JFrame 을 상속했으므로 SwingEX2도 JFrame 자료형이니 참조변수를 따로 생성할 필요는 없다. import 되었으니까 생성할 수도 있으나 이쪽이 편하다. main 메서드에서 SwingEX2를 생성하면 창이 나타난다.

다음 포스트부터 Swing의 다양한 컴포넌트들을 사용해 보겠다.

자바 스윙(java swing) 창 만들기

자바에서 gui시작하기.

JFrame을 이용해 창을 만드는 방법입니다.

1. Main.java만들기

2. program.java만들기

3. JFrame상속(gui기반의 프로그램을 만들기 위해 상속)

4. JFrame간단한 설정.

5.JFrame 크기.

JFrame

Main.java, Program.java 클래스 만들기.

- 이클립스로 들어가서 프로젝트를 하나 생성해주세요.(상단 메뉴의 파일->새로만들기->java프로젝트)

프로젝트 폴더에 클래스를 두 개 추가해주세요.

(클래스 이름은 보통 대문자로 시작합니다.)

자바 창 만들기 - jaba chang mandeulgi

먼저 Main.java라는 클래스로 가겠습니다.

new 클래스이름();을 해주세요.

저는 Program이라는 클래스를 만들었기 때문에 아래 코드처럼 했습니다.

package blog; //패키지명
public class Main {
	public static void main(String[] args) {
		new Program();
	}
}

JFrame상속

이번에는 Program이라는 클래스로 넘어가서 JFrame을 상속받겠습니다.

extends JFrame으로 상속을 받은 후 단축키ctrl+shift+o를 눌러 import해주세요.

그 후 생성자를 만들어주세요.(public Program(){ 내용 }<--이거요)

(아래 코드처럼 될겁니다.)

package blog;

import javax.swing.JFrame;

public class Program extends JFrame{
	public Program() {
	
	}
}

JFrame간단한 설정.

1. setTitle("이름") 타이틀을 표시해줍니다.

2. setDeafultCloseOperation(JFrame.EXIT_ON_CLOSE) 그냥 닫으면 프로그램 정상적으로 종료되지 않습니다.

창을 닫으면 JFrame이 꺼지게 해줍니다.

but. 이것만 쓰면 JFrame이 보이지 않습니다.

package blog;

import javax.swing.JFrame;

public class Program extends JFrame{
	public Program(){
	setTitle("blog");
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

JFrame 크기

1. setSize(x크기,y크기) JFrame크기

2. setResizable(false) 창의 크기를 변경하지 못하게 해줍니다.(true는 가능하게 해줍니다.)

3. setVisible(true) 창이 보이게 해줍니다.

4. setLocationRelativeTo(null) 창이 가운데 나오게 해줍니다.

package blog;

import javax.swing.JFrame;

public class Program extends JFrame{
	public Program(){
	setTitle("blog");
	setSize(1280,720);
	setResizable(false);
	setLocationRelativeTo(null);
	setVisible(true);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

이제 이 코드를 Main.java클래스로 가서 실행해보도록 하겠습니다.

(1280, 720)의 크기의 창이 화면의 가운데에 출력되며 blog라는 타이틀을 가지고 있는 것을 확인할 수 있습니다.

추가.

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) 코드를 제거하고 프로그램을 실행했다가 창을 닫으면 아래 사진처럼 프로그램이 닫혔음에도 작동하는 것을 확인할 수 있습니다.