230 likes | 665 Views
JAVA Presentation Swing. desitny738.tistory.com. 목 차. Swing 이란 ? Swing Component / Container JFrame / Content Pane / Program EXIT [ 실습 1,2,3] : 간단한 Swing Program 작성 Relative Layout / Flow Layout / Border Layout / Grid Layout [ 실습 4 ] : Flow Layout Absolute Layout
E N D
JAVA PresentationSwing desitny738.tistory.com
목 차 • Swing 이란? • Swing Component / Container • JFrame / Content Pane / Program EXIT • [실습1,2,3] : 간단한 Swing Program 작성 • Relative Layout / Flow Layout / Border Layout / Grid Layout • [실습4] : Flow Layout • Absolute Layout • [실습5] : Absolute Layout • Practice • [실습6] : 회원 가입 Form 생성
Swing 이란? What is Swing(in Java Applications)? • Java에서 지원해주는 GUI 패키지 • javax.swing패키지를 통해서 제공해준다. • AWT컴포넌트와 다르게 운영체제와 관계없이 항상 동일하게 GUI를 표현/작동 • AWT컴포넌트와의 구분을 위해서 J(대문자)를 앞에 붙여 주었다. • JButton, JFrame, ... ETC all.
Swing Component / Container Component Container 다른 컴포넌트를 포함할 수 있다. example JFrame JPanel • 다른 컴포넌트를 포함할 수 없다. • 임의의 컨테이너에 포함되어야 한다. • example • JMenubar • JButton • JTextField • ... Etc Component JButtonJTextField ... Container JFrame JPanel
JFrame / Content Pane / Program EXIT JFrame • 모든 스윙 컴포넌트의 최상위 컨테이너 • Frame이 생성되어야 GUI가 출력 • Frame이 닫히면 모든 컴포넌트가 사라짐 • Frame/MenuBar/ContentPane으로 구성 • MenuBar : 메뉴를 부착할 수 있는 Bar • ContentPane : 메뉴를 제외한 모든 GUI 공간 • Frame 관련 메소드 • setTitle(String) : Frame의 Title을 지정할 수 있다. • setSize(intw,int h) : 프레임의 크기를 w*h로 지정한다. • setVisible(boolean) : Frame을 화면에 보이게 해준다.(default : false)
JFrame / Content Pane / Program EXIT Frame 생성 1 : 직접 생성 Frame 생성 2 : 상속 import javax.swing.*;public class MakeFrame extends JFrame{MakeFrame(){setSize(300,150);setTitle("First Frame");setVisible(true); } public static void main(String[] args){MakeFramemf = new MakeFrame(); }} import javax.swing.*;public class MakeFrame{ public static void main(String[] args){JFramef = new JFrame();f.setSize(300,150);f.setTitle("First Frame");f.setVisible(true); }} 장점 : 단순하다. 단점 : 확장성이 떨어진다. 장점 : MakeFrame클래스에 메소드 추가가능 이로 인해, 확장성, 융통성이 높아진다.
JFrame / Content Pane / Program EXIT 실습 1 : 기본적인 Frame 생성 • 크기가 500 * 300인 MainFrame클래스를 생성하라. • Frame의 Title은 “First Frame”으로 하여라 • main 함수를 생성하여, MainFrame객체를 생성해 보아라. 500 300
JFrame / Content Pane / Program EXIT Content Pane • Container(JFrame)이 생성 되었으니, Component(ex.Button)를 부착할 수 있다. • 컴포넌트는 Content Pane에만 부착이 가능하다. • JFrame이 생성될 때 이에 대한 Content Pane은 자동으로 생성 • 즉, JFrame의 Content Pane이 무엇 인지만 알면, 컴포넌트를 붙일 수 있게 된다. • Container [NAME] = [FRAME_NAME].getContentPane(); • 위 메소드를 이용해서 현재 Content Pane을 알아 낼 수 있다. • [NAME].add([COMPONENT])로 컴포넌트를 추가할 수 있게 된다.
JFrame / Content Pane / Program EXIT 실습 2 : 실습1에 Button을 하나 생성하여 달아보자. • getContentPane() 메소드를 이용하여, 현재 Content Pane을 알아내자. • add() 메소드를 이용하여, 버튼을 10개를 생성해보자. (add(new JButton(“name”)); • 버튼의 이름은 Test1~10로 한다. • 버튼 생성 메소드: JButtonbtn = new JButton(“버튼 이름”);
JFrame / Content Pane / Program EXIT Program EXIT • System.exit(0);를 적정위치에 넣는다. • 프레임 윈도우의 X버튼의 클릭과 함께 종료 시킨다. • 그냥 생성된, X버튼은 X버튼을 눌러도 Process가 종료되지 않는다. • [FrameName].setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 를 추가한다. • 실습 3 : X버튼을 눌러서 Process가 종료되게 만들어보자. • setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);를 추가한다.
Layout 배치관리자 • 현재 프로그램은 아무런 배치가 이루어져 있지 않는다. • 이에 따라, 컴포넌트들의 위치와 크기를 결정해주는 배치 관리자가 존재한다. • 배치관리자 • 컨테이너에 부착되는 컴포넌트들의 위치와 크기를 결정 • 컨테이너에 속한 것으로 컨테이너마다 하나씩 존재 • 컴포넌트가 컨테이너로 들어오는 순간 위치와 크기를 결정 • 컨테이너 크기가 변경되면 자동으로 컴포넌트의 크기도 조절해준다. • FlowLayout, BorderLayout, GridLayout, CardLayout이 존재한다. • setLayout(new Layout_name())을 이용하여 생성한다.
Layout FlowLayout • 컨포넌트를 좌에서 우 / 위에서 아래로 배치를 해준다. • Frame 크기의 변경에 따라 자동으로 배치 / 위치가 바뀌게 된다. • 생성자 • FlowLayout() 기본 생성자 • FlowLayout(align) 정렬 기준을 정해준다. • FlowLayout.CENTER (default) 중앙 정렬 • FlowLayout.LEFT왼쪽 정렬 • FlowLayout.RIGHT오른쪽 정렬 • FlowLayout(align,inthGap,intVgap) • hGap : 컴포넌트 간의 수평 간격 설정 • vGap : 컴포넌트 간의 수직 간격 설정
Layout 실습 4: FlowLayout • 실습3에 각각의 생성자를 이용하여 FlowLayout을 실험해보자. newFlowLayout() newFlowLayout(FlowLayout.RIGHT) newFlowLayout(FlowLayout.LEFT,20,10)
Layout BorderLayout • Border : 가장자리, 끝, 인근 • 동, 서, 남, 북, 중앙 5개의 영역으로 분할하여 배치 • 5개의 영역이 존재하므로 기본적으로 5개의 컴포넌트만 붙일 수 있다. • 생성자 • BorderLayout() : 기본 생성자 • BorderLayout(inthGap, intvGap) : flow layout가 같음 • add()시 BorderLayout의 어디에 넣을지 잡아야 한다. • ex) [COTAINER].add(new JButton(“Test”),BorderLayout.EAST);
Layout BorderLayout
Layout GridLayout • Grid : 격자 • 컨테이너 공간을 지정한 개수의 사각형의 격자 모양으로 분할 • 좌에서 우로 위에서 아래로 컴포넌트를 배치하는 관리자. • 생성자 • GridLayout() : 1칸짜리 레이아웃 • GridLayout(int w, int h) : w행 h열 그리드를 생성해준다
Layout GridLayout
Layout Absolute layout • 배치관리자를 지운다. • 배치관리자는 상대적인 위치를 지정하는데, 직접적으로 위치를 지정하고자 할 때배치관리자를 지운다. • container.setLayout(null); • 배치관리자가 없어지면 추가적으로 컴포넌트 메소드를 이용해야 한다. • 컴포넌트를 객체화 하여 다음과 같은 수치를 정해줘야 한다. • void setSize(intw,int h); w*h짜리 크기를 가진 컴포넌트 생성 • void setLocation(intx,int y); 모서리를 x, y위치에 컴포넌트를 위치한다. • void setBounds(int x, int y, int w, int h); setSize + setLocation • ex) JButton btn1 = new JButton(“test1”); btn1.setSize(30,10); setLocation(10,10);cp.add(btn1);
Layout 실습 5 : 배치관리자를 지워보자 • 300 * 400 짜리 Frame을 하나 생성하자 • Frame의 Title : Absolute layout • Frame의 배치 관리자를 지운다. • Frame에 버튼 2개 객체로 생성한다. • 버튼 1 버튼 2 • 이름 : Test 1 - 이름 : Test 2 • 위치 : x: 20, y: 20 - 위치 : x: 100, y: 100 • 크기 : 80 * 50 - 크기 : 90 * 70 • 버튼 2개를 프레임에 부착하고, 메인 메소드를 이용하여 실행하여 보라
Layout JPanel • 일반적으로 Absolute Layout은 사용하지 않는다. • Frame 크기에 따라 자동으로 변화하지 않기 때문에 • 여러 가지 배치관리자를 사용하기 위해서는 Panel을 이용하여 여러 개의 컨테이너를 생성하여 이를 조정한다.
Practice 다양한 컨테이너를 사용하여 회원 가입 Form을 만들어 보자
Thank youJAVA PresentationSwing desitny738.tistory.com