PowerPoint 프레젠테이션

Similar documents
9장.key

Microsoft PowerPoint - [JAVA프로그래밍]9장GUI

PowerPoint 프레젠테이션

Microsoft PowerPoint - java2-lecture5.ppt [호환 모드]

Microsoft PowerPoint - EEL2 Lecture10 -Swing and Event Handling.pptx

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

PowerPoint Presentation

gnu-lee-oop-kor-lec10-1-chap10

11장.key

public class FlowLayoutPractice extends JFrame { public FlowLayoutPractice() { super("flowlayout Practice"); this. Container contentpane = getcontentp

PowerPoint Presentation

No Slide Title

<4D F736F F F696E74202D20C1A63230C0E520BDBAC0AE20C4C4C6F7B3CDC6AE203128B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

자바GUI실전프로그래밍2_장대원.PDF

Microsoft PowerPoint - lec04_05.ppt [호환 모드]

강의자료

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

10장.key

Microsoft PowerPoint - 04-UDP Programming.ppt

슬라이드 1

No Slide Title

슬라이드 1

Microsoft PowerPoint - ÀÚ¹Ù08Àå-2.ppt

<4D F736F F F696E74202D20C1A63138C0E520C0CCBAA5C6AE20C3B3B8AE28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

제8장 자바 GUI 프로그래밍 II

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

오버라이딩 (Overriding)

Cluster management software

PowerPoint 프레젠테이션

Java Programing Environment

Microsoft PowerPoint - 14주차 강의자료

Microsoft PowerPoint 자바-AWT컴포넌트(Ch8).pptx

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

Microsoft PowerPoint - 12장_스윙 [호환 모드]

PowerPoint 프레젠테이션

Microsoft PowerPoint - Java-03.pptx

PowerPoint Presentation

10 이벤트 처리와 그래픽 프로그래밍.key

Microsoft PowerPoint - java1-lecture10.ppt [호환 모드]

PowerPoint Presentation

PowerPoint Presentation

JTable과 MVC(Model-View-Controller) 구조 - 모델-뷰-컨트롤러구조는데이터의저장과접근에대한제공은모델이담당하고, 화면표시는뷰, 이벤트의처리는컨트롤러가하도록각역할을구분한구조이다. 즉, 역할의분담을통하여상호간의영향을최소화하고각요소의독립성을보장하여독자

Cluster management software

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Microsoft PowerPoint - java1-lecture11.ppt [호환 모드]

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

DB 에데이터저장을위한입력창설계 - JLabel, JTextField, JButton 을이용한입력창설계 - 2 -

11-GUI.key

모든스윙컴포넌트에는텍스트옆에이미지를추가로표시할수있다. ImageIcon image = new ImageIcon("image.gif"); JLabel label = new JLabel(" 이미지레이블 "); label.seticon(image);

PowerPoint Presentation

(Microsoft PowerPoint - LZVNQBAJWGTC.ppt [\310\243\310\257 \270\360\265\345])

제13강. 스윙(Swing)

Java Coding Standard

제8장 자바 GUI 프로그래밍 II

Microsoft PowerPoint - 06-Chapter09-Event.ppt

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

05-class.key

제11장 프로세스와 쓰레드

PowerPoint Presentation

8장.그래픽 프로그래밍

gnu-lee-oop-kor-lec06-3-chap7

슬라이드 1

. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

Microsoft PowerPoint - Java7.pptx

Network Programming

제1장 자바 언어 소개

(Microsoft PowerPoint - java1-lecture7.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint 프레젠테이션

(Microsoft PowerPoint - java2-lecture6.ppt [\310\243\310\257 \270\360\265\345])

Cluster management software

PowerPoint Presentation

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

Design Issues

PowerPoint Presentation

JAVA PROGRAMMING 실습 08.다형성

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft Word - java18-1-final-answer.doc

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint Presentation

PowerPoint 프레젠테이션

歯제9장.PDF

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

PowerPoint 프레젠테이션

2_안드로이드UI

Microsoft PowerPoint - java2-lecture6.ppt [호환 모드]

Microsoft PowerPoint - java1-lecture11.ppt [호환 모드]

JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

연습문제이론홀수정답

쉽게 풀어쓴 C 프로그래밍

Chap12

중간고사

PowerPoint 프레젠테이션

Transcription:

Graphical User Interface 배효철 th1g@nate.com 1

목차 자바의 GUI AWT와 Swing 패키지 Swing 클래스의특징 컨테이너와컴포넌트 Swing GUI 만들기 컨테이너와배치 2

자바의 GUI GUI 목적 그래픽이용, 사용자에게이해하기쉬운모양으로정보제공 사용자는마우스나키보드를이용하여쉽게입력 자바 GUI 특징 강력한 GUI 컴포넌트제공 쉬운 GUI 프로그래밍 자바의 GUI 프로그래밍방법 GUI 컴포넌트와그래픽이용 AWT 패키지와 Swing 패키지에제공되는메카니즘이용 AWT - java.awt 패키지 Swing - javax.swing 패키지 3

AWT 와 Swing 패키지 AWT(Abstract Windowing Toolkit) 자바가처음나왔을때함께배포된 GUI 라이브러리 java.awt 패키지 native( 운영체제 ) 와응용프로그램사이의연결라이브러리 중량컴포넌트 (Heavy weight components) AWT 컴포넌트는 native(peer) 에의존적임 OS 의도움을받아야화면에출력되며동작하는컴포넌트. 운영체제에많은부담. 오히려처리속도는빠름 4

AWT 와 Swing 패키지 Swing( 스윙 ) AWT 기술을기반으로작성된자바라이브러리 모든 AWT 기능 + 추가된풍부하고화려한고급컴포넌트 AWT 컴포넌트에 J자가덧붙여진이름의클래스 그외 J 자로시작하는클래스 순수자바언어로구현, JDK 1.1 부터 - javax.swing 패키지 Swing 컴포넌트는 native(peer 혹은운영체제 ) 에의존하지않음 경량컴포넌트 (Light weight components) 5

스윙컴포넌트예시 JButton JCheckBox JRadioButton JSlider JTextField JPasswordField JSpinner JTextArea JComboBox JList 6

스윙컴포넌트예시 JProgressBar JToolTip JMenu JScrollPane JDialog JApplet JFrame 7

스윙컴포넌트예시 JTable 8 JTree JEditorPane and JTextPane

스윙컴포넌트예시 JToolBar JSplitPane JTabbedPane 9

Swing 으로만든 GUI 샘플 JButton JLabel JTextField 프레임윈도우닫기버튼 JMenu JToolBar JFrame JMenuBar JComboBox JList JLabel JScrollPane JSplitPane 10

GUI 라이브러리계층구조 Object Font FontMetrics Component Dimension Color Graphics AWT 클래스 Button Label TextComponent Container List Canvas Scrollbar Panel Window Checkbox Choice Applet Frame Dialog Swing 클래스 JComponent JApplet JFrame JDialog JLabel JList JComboBox JSlider JTextComponent AbstractButton JScrollBar JPanel JLayeredPane JEditorPane JTextField JTextArea JOptionPane JTabbedPane JSplitPane JSeparator JRootPane JToolBar JPasswordField JMenuItem JButton JToggleButton JMenuBar JToolTip JPopupMenu JFileChooser JMenu JCheckBox JColorChooser JTree JTable JTableHeader JCheckBoxMenuItem JRadioButton JProgressBar JSpinner JScrollPane JInternalFrame JRadioButtonMenuItem 11

Swing 클래스의특징 클래스이름이 J 자로시작 화려하고다양한컴포넌트로쉽게 GUI 프로그래밍 스윙컴포넌트는 2 가지유형 JComponent 는상속받는클래스 대부분의스윙컴포넌트 AWT 의 Container 를상속받는몇개의클래스 JApplet, JDialog, JFrame 등 JComponent 매우중요한추상클래스 스윙컴포넌트의공통적인속성구현 new JComponent() 인스턴스를생성할수없음 AWT 의 Component 를상속받음 12

컨테이너와컴포넌트 컨테이너 다른컴포넌트를포함할수있는 GUI 컴포넌트 java.awt.container 를상속받음 다른컨테이너에포함될수있음 AWT 컨테이너 Panel, Frame, Applet, Dialog, Window Swing 컨테이너 최상위컨테이너 JPanel JFrame, JApplet, JDialog, Jwindow 다른컨테이너에속하지않고독립적으로존재가능한컨테이너 스스로화면에자신을출력하는컨테이너 JFrame, JDialog, JApplet 모든컴포넌트는컨테이너에포함되어야화면에출력가능 13

컨테이너와컴포넌트 컴포넌트 컨테이너에포함되어야화면에출력될수있는 GUI 객체 모든 GUI 컴포넌트의최상위클래스 java.awt.component 스윙컴포넌트의최상위클래스 javax.swing.jcomponent 14

컨테이너와컴포넌트의포함관계 JLabel JTextField JLabel JLabel JCheckBox JCheckBox JTextField JPanel JPanel JButton JPanel JFrame( 최상위컨테이너 ) 스윙의컨테이너와컴포넌트의포함관계 스윙 GUI 프로그램 15

스윙 GUI 프로그램만들기 1. 프레임만들기 2. 프레임에스윙컴포넌트붙이기 3. main() 메소드작성 스윙프로그램을작성하기위한 import 문 import java.awt.*; // 그래픽처리를위한클래스들의경로명 import java.awt.event.*; // AWT 이벤트사용을위한경로명 import javax.swing.*; // 스윙컴포넌트클래스들의경로명 import javax.swing.event.*; // 스윙이벤트를위한경로명 16

스윙프레임 모든스윙컴포넌트를담는최상위 GUI 컨테이너 JFrame 을상속받아구현 컴포넌트가화면에보이려면스윙프레임에부착되어야함 프레임을닫으면프레임내의모든컴포넌트가보이지않게됨 스윙프레임 (JFrame) 기본구성 프레임 스윙프로그램의기본틀 메뉴바 메뉴들이부착되는공간 컨텐트팬 GUI 컴포넌트들이부착되는공간 타이틀바를가진 Frame 메뉴바 Menu Bar JFrame Frame 17 컨텐트팬 : 화면에출력될모든컴포넌트들이부착되는공간 Content Pane

프레임만들기 타이틀 300 픽셀 300 픽셀 18

프레임만들기 두가지방법 main() 메소드에서 JFrame 객체를생성 확장성, 융통성결여 import javax.swing.*; JFrame 을상속받은프레임클래스이용 main() 은단순히프레임객체를생성하는역할 import javax.swing.*; public class MyApp { public static void main(string [] args) { JFrame f = new JFrame(); f.settitle(" 첫번째프레임 "); f.setsize(300,300); f.setvisible(true); 방법 1. main() 메소드에서 JFrame 객체생성 추천 public class MyFrame extends JFrame { MyFrame() { settitle(" 첫번째프레임 "); setsize(300,300); setvisible(true); public static void main(string [] args) { MyFrame mf = new MyFrame(); 방법 2. JFrame 을상속받은프레임클래스이용 19

main() 의위치 추천 import javax.swing.*; public class MyFrame extends JFrame { MyFrame() { settitle(" 첫번째프레임 "); setsize(300,300); setvisible(true); public static void main(string [] args) { MyFrame mf=new MyFrame(); main() 을프레임클래스내의멤버로작성 import javax.swing.*; class MyFrame extends JFrame { MyFrame() { settitle(" 첫번째프레임 "); setsize(300,300); setvisible(true); public class MyApp { public static void main(string [] args) { MyFrame mf = new MyFrame(); main() 을가진다른클래스 MyApp 작성 20

프레임에컴포넌트붙이기 타이틀 타이틀바에부착 // JFrame 의생성자이용 JFrame frame = new JFrame(" 타이틀문자열 "); // JFrame 의 settitle() 메소드호출 frame.settitle(" 타이틀문자열 "); JFrame frame = new JFrame(); 컨텐트팬알아내기 Container contentpane = frame.getcontentpane(); 스윙컴포넌트 컨텐트팬에부착 컨텐트팬에컴포넌트달기 JFrame frame = new JFrame(); JButton b = new JButton("Click"); Container c = frame.getcontentpane(); c.add(b); 컨텐트팬변경 JPanel p = new JPanel(); frame.setcontentpane(p); 21

TIP!! Tip. 컨텐트팬에대한 JDK1.5 이후의변경사항 JDK 1.5 이전 프레임의컨텐트팬을알아내어반드시컨텐트팬에컴포넌트부착 JFrame frame = new JFrame(); JButton b = new JButton("Click"); Container c = frame.getcontentpane(); c.add(b); // 버튼 b 를컨텐트팬에부착 JDK 1.5 이후 프레임에컴포넌트를부착하면프레임이대신컨텐트팬에부착 JFrame frame = new JFrame(); JButton b = new JButton("Click"); frame.add(b); // 컨텐트팬에대신버튼 b 부착 JDK 1.5 이전처럼명료하게컨텐트팬에컴포넌트를부착하는것이바람직함 컨텐트팬에접근하고다루는경우가많기때문 22

예제 1 import javax.swing.*; import java.awt.*; public class ContentPaneEx extends JFrame { ContentPaneEx() { settitle("contentpane 과 JFrame"); setdefaultcloseoperation(jframe.exit_on_close); Container contentpane = getcontentpane(); contentpane.setbackground(color.orange); contentpane.setlayout(new FlowLayout()); contentpane.add(new JButton("OK")); contentpane.add(new JButton("Cancel")); contentpane.add(new JButton("Ignore")); setsize(350, 150); setvisible(true); public static void main(string[] args) { ContentPaneEX cp = new ContentPaneEx(); 23

스윙응용프로그램의종료 응용프로그램내에서스스로종료 System.exit(0); 언제어디서나무조건종료 프레임종료버튼 (X) 이클릭되면어떤일이일어나는가? 프레임을종료하여프레임윈도우가닫힘 프레임이화면에서보이지않게되고응용프로그램이사라짐 프레임이보이지않게되지만응용프로그램이종료한것아님 키보드나마우스입력을받지못함 다시 setvisible(true) 를호출하면보이게되고이전처럼작동함 프레임종료버튼이클릭될때프레임을닫고응용프로그램이종료하도록하는방법 frame.setdefaultcloseoperation(jframe.exit_on_close); 24

스윙응용프로그램의종료 스윙프로그램이실행되는동안생성되는스레드 메인스레드 main() 을실행하는스레드 자바응용프로그램의실행을시작한스레드 이벤트처리스레드 스윙응용프로그램이실행될때자동으로실행되는스레드 이벤트처리스레드의역할 프레임과버튼등 GUI 화면그리기 키나마우스입력을받아이벤트를처리할코드호출 자바응용프로그램의종료조건 실행중인사용자스레드가하나도없을때종료 스윙프로그램 main() 종료뒤프레임이살아있는이유 메인스레드가종료되어도이벤트처리스레드가살아있어프레임화면을그리고마우스나키입력을받기때문 25

컨테이너와배치개념 컨테이너 (Container) 1. 컨테이너마다하나의배치관리자가존재하며, 삽입되는모든컴포넌트의위치와크기를결정하고적절히배치한다. 이쪽으로가세요. 2. 컨테이너의크기가변하면내부컴포넌트들의위치와크기를모두재조절하고재배치한다. 배치관리자 (Layout Manager) 컴포넌트 (Component) 26

배치관리자대표유형 4 가지 java.awt 패키지에구현되어있음 FlowLayout BorderLayout 이쪽으로가세요. 이쪽으로가세요. GridLayout CardLayout 이쪽으로가세요. 이쪽으로가세요. 27

컨테이너와배치관리자 컨테이너의디폴트배치관리자 컨테이너는생성시디폴트배치관리자설정 컨테이너에새로운배치관리자설정 Container.setLayout(LayoutManager lm) lm 을새로운배치관리자로설정 // JPanel 패널에 BorderLayout 배치관리자를설정하는예 JPanel p = new JPanel(); p.setlayout(new BorderLayout()); JFrame frame = new JFrame(); Container c = frame.getconentpane(); // 프레임의컨텐트팬 c.setlayout(new FlowLayout()); // 컨텐트팬에 FlowLayout 설정 혹은 frame.setlayout(new FlowLayout()); // JDK 1.5 이후버전에서 28

FlowLayout 배치방법 컨테이너공간내에왼쪽에서오른쪽으로배치 다시위에서아래로순서대로컴포넌트를배치한다. container.setlayout(new FlowLayout()); container.add(new JButton("add")); container.add(new JButton("sub")); container.add(new JButton("mul")); container.add(new JButton("div")); container.add(new JButton("Calculate")); 29

FlowLayout 컨테이너의크기가변하면배치관리자에의해재배치됨 프레임의크기를바꾸면배치도변한다. 30

FlowLayout - 생성자와속성 생성자 FlowLayout() FlowLayout(int align) FlowLayout(int align, int hgap, int vgap) align : 컴포넌트의정렬 (5 가지중많이사용되는 3 가지 ) FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER( 디폴트 ) hgap : 좌우두컴포넌트사이의수평간격, 픽셀단위 ( 디폴트 : 5) vgap : 상하두컴포넌트사이의수직간격, 픽셀단위 ( 디폴트 : 5) vgap hgap 31 FlowLayout.LEFT 로정렬됨

예제 2 import javax.swing.*; import java.awt.*; public class FlowLayoutEx extends JFrame { FlowLayoutEx() { settitle("flowlayout Sample"); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); vgap, 40 픽셀 c.setlayout(new FlowLayout(FlowLayout.LEFT, 30, 40)); c.add(new JButton("add")); c.add(new JButton("sub")); c.add(new JButton("mul")); c.add(new JButton("div")); c.add(new JButton("Calculate")); hgap, 30 픽셀 FlowLayout.LEFT 로정렬됨 setsize(300, 250); setvisible(true); public static void main(string[] args) { new FlowLayoutEx(); 32

BorderLayout 배치방법 컨테이너공간을 5 구역으로분할, 배치 East, West, South, North, Center 배치방법 add(component comp, int index) comp 를 index 의공간에배치 컨테이너의크기가변하면재배치 BorderLayout.NORTH BorderLayout.EAST container.setlayout(new BorderLayout()); container.add(new JButton("div"), BorderLayout.WEST); container.add(new JButton("Calculate"), BorderLayout.CENTER); BorderLayout.WEST BorderLayout.SOUTH BorderLayout.CENTER 33

BorderLayout 생성자와속성 생성자 BorderLayout() BorderLayout(int hgap, int vgap) hgap : 좌우두컴포넌트사이의수평간격, 픽셀단위 ( 디폴트 : 0) vgap : 상하두컴포넌트사이의수직간격, 픽셀단위 ( 디폴트 : 0) 34

BorderLayout 의사용예 CENTER에컴포넌트가삽입될때 CENTER와 NORTH에컴포넌트가삽입될때 CENTER, NORTH, SOUTH에 컴포넌트가삽입될때 new BorderLayout(30,20); 으로배치관리자를생성하였을때 vgap, 20 픽셀 hgap, 30 픽셀 35

예제 3 import javax.swing.*; import java.awt.*; public class BorderLayoutEx extends JFrame { BorderLayoutEx() { settitle("borderlayout Sample"); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); c.setlayout(new BorderLayout()); c.add(new JButton("add"), BorderLayout.NORTH); c.add(new JButton("sub"), BorderLayout.SOUTH); c.add(new JButton("mul"), BorderLayout.EAST); c.add(new JButton("div"), BorderLayout.WEST); c.add(new JButton("Calculate"), BorderLayout.CENTER); setsize(300, 200); setvisible(true); public static void main(string[] args) { new BorderLayoutEx(); 36

GridLayout 배치방법 컨테이너공간을동일한사각형격자 ( 그리드 ) 로분할하고각셀에하나의컴포넌트배치 격자구성은생성자에행수와열수지정 셀에왼쪽에서오른쪽으로, 다시위에서아래로순서대로배치 container.setlayout(new GridLayout(4,3,5,5)); // 4 3 분할로컴포넌트배치 container.add(new JButton("1")); // 상단왼쪽첫번째셀에버튼배치 container.add(new JButton("2")); // 그옆셀에버튼배치 4x3 그리드레이아웃설정 총 11 개의버튼이순서대로 add 됨 수직간격 vgap : 5 픽셀 수평간격 hgap : 5 픽셀 컨테이너의크기가변하면재배치 크기재조정 37

GridLayout 생성자와속성 생성자 GridLayout() GridLayout(int rows, int cols) GridLayout(int rows, int cols, int hgap, int vgap) rows : 격자의행수 ( 디폴트 : 1) cols : 격자의열수 ( 디폴트 : 1) hgap : 좌우두컴포넌트사이의수평간격, 픽셀단위 ( 디폴트 : 0) vgap : 상하두컴포넌트사이의수직간격, 픽셀단위 ( 디폴트 : 0) rows x cols 만큼의셀을가진격자로컨테이너공간을분할, 배치 38

예제 4 import javax.swing.*; import java.awt.*; public class GridLayoutEx extends JFrame { GridLayoutEx() { settitle("gridlayout Sample"); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); GridLayout grid = new GridLayout(4, 2); grid.setvgap(5); c.setlayout(grid); c.add(new JLabel(" 이름 ")); c.add(new JTextField("")); c.add(new JLabel(" 학번 ")); c.add(new JTextField("")); c.add(new JLabel(" 학과 ")); c.add(new JTextField("")); c.add(new JLabel(" 과목 ")); c.add(new JTextField("")); 두행사이의수직간격 vgap 이 5 픽셀로설정됨 setsize(300, 200); setvisible(true); public static void main(string[] args) { new GridLayoutEx(); 39

배치관리자없는컨테이너 배치관리자가없는컨테이너개념 응용프로그램에서컴포넌트의절대크기와절대위치결정 용도 컴포넌트의크기나위치를개발자임의로결정하고자하는경우 게임프로그램과같이시간이나마우스 / 키보드의입력에따라컴포넌트들의위치와크기가수시로변하는경우 여러컴포넌트들이서로겹쳐출력하고자하는경우 컨테이너의배치관리자제거방법 container.setlayout(null); // JPanel 의배치관리자를삭제하는예 JPanel p = new JPanel(); p.setlayout(null); 40

배치관리자없는컨테이너 컴포넌트의크기와위치설정 프로그램내에서이루어져야함 컴포넌트들이서로겹치게할수있음 다음메소드이용 컴포넌트크기설정 : component.setsize(int width, int height); 컴포넌트위치설정 : component.setlocation(int x, int y); 컴포넌트위치와크기동시설정 : component.setbounds(int x, int y, int width, int height); 41

예제 5 import javax.swing.*; import java.awt.*; public class NullContainerEx extends JFrame { NullContainerEx() { settitle("null Container Sample"); setdefaultcloseoperation(jframe.exit_on_close); Container c = getcontentpane(); c.setlayout(null); JLabel la = new JLabel("Hello, Press Buttons!"); la.setlocation(130, 50); la.setsize(200, 20); c.add(la); for(int i=1; i<=9; i++) { JButton b = new JButton(Integer.toString(i)); b.setlocation(i*15, i*15); b.setsize(50, 20); c.add(b); setsize(300, 200); setvisible(true); 원하는위치에원하는크기로컴포넌트를마음대로배치할수있다. public static void main(string[] args) { new NullContainerEx(); 42