280 likes | 445 Views
GUI 와 Swing. SwingSet demo. 데모 GUI 의 실행 Java 디렉토리의 demojfcSwingSet2 로 가서 SwingSet2.jar 를 더블클릭하거나 명령 프람프트에서 해당 디렉토리로 가서 다음을 입력하라 . java – jar SwingSet2.jar 디스플레이된 화면에서 첫 메뉴 버튼 바 줄의 왼쪽에서 두 번째 메뉴 버튼인 체크박스와 라디오버튼이 그려진 메뉴 버튼을 클릭해보라 제일 첫 줄의 ‘ Look&Feel ’ 메뉴를 눌러 Motif Look&Feel 이나
E N D
SwingSet demo • 데모 GUI의 실행 • Java 디렉토리의 demo\jfc\SwingSet2로 가서 SwingSet2.jar를 더블클릭하거나 • 명령 프람프트에서 해당 디렉토리로 가서 다음을 입력하라. • java –jar SwingSet2.jar • 디스플레이된 화면에서 첫 메뉴 버튼 바 줄의 왼쪽에서 두 번째 메뉴 버튼인 체크박스와 라디오버튼이 그려진 메뉴 버튼을 클릭해보라 • 제일 첫 줄의 ‘Look&Feel’메뉴를 눌러 • Motif Look&Feel 이나 • Windows Style Look&Feel을 클릭해보라
자바의 GUI • AWT(Abstract Window Toolkit) • 자바가 처음 발표되었을 때 탑재돼 있던 그래픽 제작용 라이브러리 • 디자인, 기능면에서 불편 • Swing • AWT의 후속으로 1997년 발표 • 많은 기능이 추가됨
Swing의 특징 • Write Once, Run Anywhere • 자바는 OS에 비의존적 • 100% 자바사양에 의해 만들어짐 • Pluggable Look & Feel • 3가지 컴포넌트 외관을 실행 중에도 언제나 변경 가능 • Java Look & Feel • Motif Look & Feel • Windows Style Look & Feel • JDK 1.3.1 에 통합되어 있음
컴포넌트와 컨테이너 • 컴포넌트 • GUI를 구성하기 위한 여러 가지 부품 • 버튼, 라벨, 텍스트 입력용 필드, 메뉴바 등 • 컨테이너 • 컴포넌트를 담기 위한 일종의 그릇 • 컴포넌트를 컨테이너 안에 적당히 배열하여 원하는 GUI를 만듦 • Ex) JFrame
JFrame 클래스 • 응용프로그램의 윈도우를 만드는데 사용하는 클래스 • 생성자 • JFrame() • 타이틀을 지정하지 않고 새로운 프레임을 작성 • JFrame(String title) • 타이틀을 지정하여 새로운 프레임을 작성
JFrame()의 메소드 • 변수이름.setSize(int폭, int높이) • Ex) myFrame.setSize(300, 200); • 변수이름.setVisible(boolean상태) • Ex) myFrame.setVisible(true);
윈도우의 표시 절차 • javax.swing패키지를 import • Jframe클래스의 인스턴스를 생성 • setSize메소드로 윈도우 크기를 지정 • setVisible메소드로 윈도우를 가시상태로 설정
다음 코드를 입력하고 수행하라. import javax.swing. * ; import java.awt.* ; import java.awt.event.* ; public class SampleD7L2 { public static void main(String[] args) { //타이틀을 지정하여 JFrame의 생성자를 불러낸다 JFrame myFrame = new JFrame( "처음 하는 Swing 애플리케이션") ; //프레임(윈도우)이 닫힐 때의 처리를 정의 myFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }) ; //크기를 300X200으로 설정하여 윈도우를 표시 myFrame.setSize(300, 200) ; myFrame.setVisible(true) ; } }
다음처럼 주석 표시를 하여 수행해보라. import javax.swing. * ; import java.awt.* ; import java.awt.event.* ; public class SampleD7L2 { public static void main(String[] args) { //타이틀을 지정하여 JFrame의 생성자를 불러낸다 JFrame myFrame = new JFrame("처음 하는 Swing 애플리케이션") ; /* //프레임(윈도우)이 닫힐 때의 처리를 정의 myFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); //응용프로그램 윈도우가 닫힐 때 자바VM도 함께 끝냄 } }) ; */ //크기를 300X200으로 설정하여 윈도우를 표시 myFrame.setSize(300, 200) ; myFrame.setVisible(true) ; } }
연습 • Jframe클래스를 사용하여 프레임을 작성하고 표시하라. 단, • 타이틀: “Hello, Swing Application!” • 크기: 폭 250, 높이 250 으로 하라.
객체지향의 특징 • 캡슐화 • 상속 • 다형성
상속 • 어느 한 클래스가 갖는 메소드나 필드를 이어받아 새로운 클래스를 작성하는 것 클래스 A 클래스 A는 클래스 AA의 수퍼클래스 클래스 AA는 클래스 A의 서브클래스 클래스 AA
다형성 • 메소드의 오버라이드 • 수퍼클래스가 가진 메소드에 새로운 기능을 추가하여 자기 나름대로의 메소드로 변형, 추가하는 것 • 클래스 AA • 필드 • 필드 1 • 필드 2 • 필드 3 • 메소드 • 필드 1의 값을 표시 • 필드 2의 값을 표시 • 필드 3의 값을 표시 • 클래스 A • 필드 • 필드 1 • 필드 2 • 메소드 • 필드 1의 값을 표시 • 필드 2의 값을 표시
Jframe내 컴포넌트 추가 • 형식 • 객체이름.getContentPane().add(추가할 컴포넌트) • 예) myFrame.getContentPane().add(myButton)
JButton클래스 생성자 호출 • 형식 • JButton 변수이름 = new JButton 클래스생성자 • JButton 클래스 생성자의 종류 • JButton() : 텍스트 및 아이콘이 없는 버튼을 작성 • JButton(String text) : 텍스트 있는 버튼을 작성 • JButton(Icon icon) : 아이콘이 있는 버튼을 작성 • JButton(String text, Icon icon) : 텍스트 및 아이콘이 있는 버튼을 작성 • JButton(Action a) : 지정된 Action에서 프로퍼티를 취하여 버튼을 작성 예) //JButton 클래스의 인스턴스 생성 JButton myButton = new JButton("나는 버튼") ; //프레임에 버튼 추가 myFrame.getContentPane().add(myButton) ;
Look & Feel의 설정 • 형식 • setLookAndFeel(LookAndFeel객체) • setLookAndFeel(String 지정하고싶은LookAndFeel클래스의 이름) 예) //Windows 스타일의 Look & Feel로 설정 UIManager.setLookAndFeel ( "com.sun.java.swing.plaf.windows.WindowsLookAndFeel") ; /* # Metal 스타일로 할 경우 : "javax.swing.plaf.metal.MetalLookAndFeel" # Motif 스타일로 할 경우 "com.sun.java.swing.plaf.motif.MotifLookAndFeel" */
setLookAndFeel 메소드가 던질 수 있는 예외 • ClassNotFoundException • InstantiationException • IllegalAccessException • UnsupportedlookAndFeelException
Look & Feel의 반영 • 형식 • SwingUtilities.updateComponentTreeUI(Frame이름) ; 예) SwingUtilities.updateComponentTreeUI(myFrame) ;
다음 코드를 입력하고 수행하라. • //Look & Feel의 설정 • try { • //Windows 스타일의 Look & Feel로 설정 • UIManager.setLookAndFeel ( • "com.sun.java.swing.plaf.windows.WindowsLookAndFeel") ; • //설정에 반영한다 • SwingUtilities.updateComponentTreeUI(myFrame) ; • //에러 처리 블록 • } catch (Exception e) { • } • //프레임의 크기를 설정하여 표시 • myFrame.setSize(250, 100) ; • myFrame.setVisible(true) ; • } • } import javax.swing.* ; import java.awt.* ; import java.awt.event.* ; public class SampleD7L3 { public static void main(String[] args) { //JFrame 클래스의 인스턴스 생성 JFrame myFrame = new JFrame("버튼을 얹은 애플리케이션") ; //JButton 클래스의 인스턴스 생성 JButton myButton = new JButton("나는 버튼") ; //프레임에 버튼 추가 /*JFrame에는 직접 컴포넌트를 추가할 수 없으므로, ContentPane을 취하여 그곳에 추가한다*/ myFrame.getContentPane().add(myButton) ; //프레임(윈도우)이 닫힐 때의 처리를 정의 myFrame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0) ; } }) ;
연습 • Motif 스타일로 Look & Feel을 설정하여 프로그램을 수행하라.
label 컴포넌트 • 문자열이나 이미지를 표시 • JLabel 클래스 생성자의 종류 • JLabel(): 빈 라벨을 생성 • JLabel(Icon image): 이미지를 지정하여 라벨을 작성 • JLabel(Icon image, int horizontalAlignment): 이미지의 수평방향의 배치방법을 지정하여 라벨을 작성 • JLabel(String text): 텍스트를 지정하여 라벨을 작성 • JLabel(String text, Icon image, int horizontalAlignment): 텍스트, 이미지의 수평방향의 배치방법을 지정하여 라벨을 작성 • JLabel(String text, int horizontalAlignment): 텍스트의 수평방향의 배치방법을 지정하여 라벨을 작성 예) //Icon 클래스의 인스턴스 생성 Icon myIcon = new ImageIcon(“smile.gif”); //JLabel 클래스의 인스턴스 생성 JLabel myLabel = new JLabel("라벨입니다“, myIcon, JLabel, CENTER)) ;
Text 필드 컴포넌트 • 1행 분량의 텍스트의 입력이나 편집 • JTextField 클래스 생성자의 종류 • JTextField(): 빈 텍스트필드를 생성 • JTextField(Document doc, String text, int columns): 지정된 텍스트 storage model과 열수를 사용하여 텍스트필드를 생성 • JTextField(int columns): 지정된 열수로 텍스트필드를 생성 • JTextField(String text): 지정된 텍스트를 사용하여 텍스트필드를 생성 • JTextField(String text, int columns): 지정된 텍스트를 표시하고 지정된 열수로 텍스트필드를 생성 예) //JTextField 클래스의 인스턴스 생성 JTextField myText = new JTextField("텍스트 필드입니다", 15) ;
레이아웃 매니저 • 컴포넌트를 켄테이너 상에 배치 • 종류 • Flow layout: 컴포넌트를 컨테이너 왼쪽에서 오른쪽, 위에서 아래로 흐르듯이 배치 • Grid layout: 격자 상으로 순서대로 끼워넣듯이 배치 • Border layout: 동서남북, 중앙의 다섯 지역으로 분할하여 끼워넣듯이 배치 • Card layout: 컴포넌트를 카드와 같이 겹쳐서 배치, 제일 위의 카드 만이 보이도록 되어 있어 필요에 따라 카드를 접듯이 컴포넌트의 표시를 바꿀 수 있다 • Grid bag layout: Grid Layout보다 좀 더 자유롭게 레이아웃 실현 • Box layout: 여러 컴포넌트를 수직 방향에서도 수평방향에서도 배치할 수 있도록 함 • Overlay layout: 컴포넌트를 서로 켭치도록 배치 • Scroll pane layout: JScrollPane이 사용하는 레이아웃 매니저 • View port layout: Jviewport의 디폴트 레이아웃 매니저
레이아웃 매니저 사용 예 //레이아웃 매니저(FlowLayout)의 인스턴스 생성 FlowLayout fLayout = new FlowLayout(FlowLayout.CENTER, 5, 5) ; //컨테이너(프레임)에 레이아웃 세트 myFrame.getContentPane().setLayout(fLayout) ;
//프레임에 컴포넌트 추가 myFrame.getContentPane().add(myButton) ; myFrame.getContentPane().add(myLabel) ; myFrame.getContentPane().add(myText) ; //프레임(윈도우)이 닫힐 때의 처리를 정의 myFrame.addWindowListener (new WindowAdapter() { public void windowClosing (WindowEvent e) { System.exit(0) ; } }); //Look & Feel 설정 try { //Windows 스타일의 Look & Feel로 설정 UIManager.setLookAndFeel ( "com.sun.java.swing.plaf.windows.WindowsLookAndFeel") ; //설정을 반영시킨다 SwingUtilities.updateComponentTreeUI(myFrame) ; //에러 처리 블록 } catch (Exception e) { } //프레임 크기를 설정하여 표시 myFrame.setSize(250, 100) ; myFrame.setVisible(true) ; } } 다음 코드를 입력하고 수행하라. import javax.swing.* ; import java.awt.* ; import java.awt.event.* ; public class SampleD7L4 { public static void main(String[] args) { //JFrame 클래스의 인스턴스 생성 JFrame myFrame = new JFrame("여러 가지 컴포넌트를 포함한 애플리케이션") ; //레이아웃 매니저(FlowLayout)의 인스턴스 생성 FlowLayout fLayout = new FlowLayout(FlowLayout.CENTER, 5, 5) ; //컨테이너(프레임)에 레이아웃 세트 myFrame.getContentPane().setLayout(fLayout) ; //JButton 클래스의 인스턴스 생성 JButton myButton = new JButton("버튼입니다") ; //JLabel 클래스의 인스턴스 생성 JLabel myLabel = new JLabel("라벨입니다") ; //JTextField 클래스의 인스턴스 생성 JTextField myText = new JTextField("텍스트 필드입니다", 15) ;
연습 • “***Java World***”라는 타이틀을 갖는 폭 300, 높이 400의 윈도우 프레임을 만들어라.
연습 • 다음 컴포넌트에 해당하는 사항을 가지고 프로그램하라 • 프레임의 타이틀 • Welcome to Java World! • 프레임의 크기 • 폭: 400, 높이: 200 • 버튼의 캡션 • 눌러 주세요! • 라벨의 캡션 • Powered Java! • 텍스트 필드의 표시 문자열 • 환영 • 텍스트 필드의 열수 • 10