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

Similar documents
9장.key

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

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

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

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

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

PowerPoint Presentation

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

11장.key

No Slide Title

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

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

<4D F736F F F696E74202D20C1A63230C0E520BDBAC0AE20C4C4C6F7B3CDC6AE203128B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

강의자료

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

Microsoft PowerPoint - 04-UDP Programming.ppt

슬라이드 1

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

슬라이드 1

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

10장.key

No Slide Title

오버라이딩 (Overriding)

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63138C0E520C0CCBAA5C6AE20C3B3B8AE28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - 14주차 강의자료

Cluster management software

Java Programing Environment

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

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

Microsoft PowerPoint - Java-03.pptx

PowerPoint 프레젠테이션

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

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

PowerPoint Presentation

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

PowerPoint Presentation

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

PowerPoint 프레젠테이션

PowerPoint Presentation

Cluster management software

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

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

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

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

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

PowerPoint 프레젠테이션

PowerPoint Presentation

11-GUI.key

제13강. 스윙(Swing)

Java Coding Standard

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

Microsoft PowerPoint - 06-Chapter09-Event.ppt

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

제11장 프로세스와 쓰레드

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - Java7.pptx

05-class.key

Network Programming

8장.그래픽 프로그래밍

PowerPoint Presentation

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

슬라이드 1

Cluster management software

PowerPoint Presentation

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

제1장 자바 언어 소개

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

Design Issues

PowerPoint Presentation

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

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint Presentation

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

JAVA PROGRAMMING 실습 08.다형성

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

Chap12

중간고사

JAVA PROGRAMMING 실습 09. 예외처리

<4D F736F F F696E74202D205B4A415641C7C1B7CEB1D7B7A1B9D65D3130C0E5C0CCBAA5C6AEC3B3B8AE>

PowerPoint Presentation

歯제9장.PDF

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

2_안드로이드UI

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

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

연습문제이론홀수정답

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 05. 객체의 활용

PowerPoint 프레젠테이션

Transcription:

명품 JAVA Programming 1 제 9 장자바 GUI 기초, AWT 와스윙 (SWING)

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

AWT 와 Swing 패키지 3 AWT(Abstract Windowing Toolkit) 자바가처음나왔을때함께배포된 GUI 라이브러리 java.awt 패키지 Frame, Window, Panel, Button, Label, native( 운영체제 ) 와응용프로그램사이의연결라이브러리 중량컴포넌트 (Heavy weight components) AWT 컴포넌트는 native(peer) 에의존적임 OS의도움을받아야화면에출력되며동작하는컴포넌트. 운영체제에많은부담. 오히려처리속도는빠름 운영체제에따라서른다른모양으로그려짐 Swing( 스윙 ) AWT 기술을기반으로작성된자바라이브러리 모든 AWT 기능 + 추가된풍부하고화려한고급컴포넌트 AWT 컴포넌트에 J자가덧붙여진이름의클래스 그외 J 자로시작하는클래스순수자바언어로구현, JDK 1.11 부터 - javax.swing 패키지 JFrame, JWindow, JPanel, JButton, JLabel, Swing 컴포넌트는 native(peer 혹은운영체제 ) 에의존하지않음 경량컴포넌트 (Light weight components) 운영체제에관계없이항상동일하게작동하며동일한모양으로그려짐

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

JProgressBar JToolTip JMenu JScrollPane JDialog JApplet JFrame 5

JTable 6 JTree JEditorPane and JTextPane

JToolBar JSplitPane JTabbedPane 7

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

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 9

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

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

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

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

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

프레임만들기 타이틀 15 두가지방법 300 픽셀 main() 메소드에서 JFrame 객체를생성 확장성, 융통성결여 import javax.swing.*; 300 픽셀 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 을상속받은프레임클래스이용

main() 의위치 16 추천 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 작성

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

Tip. 컨텐트팬에대한 JDK1.5 이후의변경사항 18 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 이전처럼명료하게컨텐트팬에컴포넌트를부착하는것이바람직함 컨텐트팬에접근하고다루는경우가많기때문

예제 9-1 : 컴포넌트를부착한프레임예 19 import javax.swing.*; import java.awt.*; public class ContentPaneEx extends JFrame { ContentPaneEx() { settitle("contentpane il 과 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) { new ContentPaneEx();

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

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

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

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

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

FlowLayout 25 배치방법 컨테이너공간내에왼쪽에서오른쪽으로배치 다시위에서아래로순서대로컴포넌트를배치한다. 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"));

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

FlowLayout - 생성자와속성 27 생성자 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 FlowLayout.LEFT 로정렬됨

28 예제 9-2 : LEFT로정렬되는수평간격이 30 픽셀, 수직간격이 40 픽셀인 FlowLayout 사용예 import javax.swing.*; import java.awt.*; public class FlowLayoutEx extends JFrame { FlowLayoutEx() { settitle("flowlayout Sample"); setdefaultcloseoperation(jframe.exit_on_close); setlayout(new FlowLayout(FlowLayout.LEFT, y 30, 40)); add(new JButton("add")); add(new JButton("sub")); add(new JButton("mul")); add(new JButton("div")); add(new JButton("Calculate")); setsize(300, 250); setvisible(true); vgap, 40 픽셀 public static void main(string[] args) { new FlowLayoutEx(); hgap, 30 픽셀 FlowLayout.LEFTLEFT 로정렬됨

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

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

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

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

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

GridLayout 생성자와속성 34 생성자 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 만큼의셀을가진격자로컨테이너공간을분할, 배치

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

배치관리자없는컨테이너 36 배치관리자가없는컨테이너개념 용도 응용프로그램에서컴포넌트의절대크기와절대위치결정 컴포넌트의크기나위치를개발자임의로결정하고자하는경우게임프로그램과같이시간이나마우스 / 키보드의입력에따라컴포넌트들의위치와크기가수시로변하는경우여러컴포넌트들이서로겹쳐출력하고자하는경우 컨테이너의배치관리자제거방법 container.setlayout(null); // JPanel의배치관리자를삭제하는예 JPanel p = new JPanel(); p.setlayout(null); 컴포넌트의크기와위치설정 프로그램내에서이루어져야함컴포넌트들이서로겹치게할수있음다음메소드이용 컴포넌트크기설정 : component.setsize(int width, int height); 컴포넌트위치설정 : component.setlocation(int x, int y); 컴포넌트위치와크기동시설정 : component.setbounds(int x, int y, int width, int height);

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