1 / 28

GUI 와 Swing

GUI 와 Swing. SwingSet demo. 데모 GUI 의 실행 Java 디렉토리의 demojfcSwingSet2 로 가서 SwingSet2.jar 를 더블클릭하거나 명령 프람프트에서 해당 디렉토리로 가서 다음을 입력하라 . java – jar SwingSet2.jar 디스플레이된 화면에서 첫 메뉴 버튼 바 줄의 왼쪽에서 두 번째 메뉴 버튼인 체크박스와 라디오버튼이 그려진 메뉴 버튼을 클릭해보라 제일 첫 줄의 ‘ Look&Feel ’ 메뉴를 눌러 Motif Look&Feel 이나

soyala
Download Presentation

GUI 와 Swing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GUI와 Swing

  2. SwingSet demo • 데모 GUI의 실행 • Java 디렉토리의 demo\jfc\SwingSet2로 가서 SwingSet2.jar를 더블클릭하거나 • 명령 프람프트에서 해당 디렉토리로 가서 다음을 입력하라. • java –jar SwingSet2.jar • 디스플레이된 화면에서 첫 메뉴 버튼 바 줄의 왼쪽에서 두 번째 메뉴 버튼인 체크박스와 라디오버튼이 그려진 메뉴 버튼을 클릭해보라 • 제일 첫 줄의 ‘Look&Feel’메뉴를 눌러 • Motif Look&Feel 이나 • Windows Style Look&Feel을 클릭해보라

  3. 자바의 GUI • AWT(Abstract Window Toolkit) • 자바가 처음 발표되었을 때 탑재돼 있던 그래픽 제작용 라이브러리 • 디자인, 기능면에서 불편 • Swing • AWT의 후속으로 1997년 발표 • 많은 기능이 추가됨

  4. 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 에 통합되어 있음

  5. 컴포넌트와 컨테이너 • 컴포넌트 • GUI를 구성하기 위한 여러 가지 부품 • 버튼, 라벨, 텍스트 입력용 필드, 메뉴바 등 • 컨테이너 • 컴포넌트를 담기 위한 일종의 그릇 • 컴포넌트를 컨테이너 안에 적당히 배열하여 원하는 GUI를 만듦 • Ex) JFrame

  6. JFrame 클래스 • 응용프로그램의 윈도우를 만드는데 사용하는 클래스 • 생성자 • JFrame() • 타이틀을 지정하지 않고 새로운 프레임을 작성 • JFrame(String title) • 타이틀을 지정하여 새로운 프레임을 작성

  7. JFrame()의 메소드 • 변수이름.setSize(int폭, int높이) • Ex) myFrame.setSize(300, 200); • 변수이름.setVisible(boolean상태) • Ex) myFrame.setVisible(true);

  8. 윈도우의 표시 절차 • javax.swing패키지를 import • Jframe클래스의 인스턴스를 생성 • setSize메소드로 윈도우 크기를 지정 • setVisible메소드로 윈도우를 가시상태로 설정

  9. 다음 코드를 입력하고 수행하라. 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) ; } }

  10. 다음처럼 주석 표시를 하여 수행해보라. 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) ; } }

  11. 연습 • Jframe클래스를 사용하여 프레임을 작성하고 표시하라. 단, • 타이틀: “Hello, Swing Application!” • 크기: 폭 250, 높이 250 으로 하라.

  12. 객체지향의 특징 • 캡슐화 • 상속 • 다형성

  13. 상속 • 어느 한 클래스가 갖는 메소드나 필드를 이어받아 새로운 클래스를 작성하는 것 클래스 A 클래스 A는 클래스 AA의 수퍼클래스 클래스 AA는 클래스 A의 서브클래스 클래스 AA

  14. 다형성 • 메소드의 오버라이드 • 수퍼클래스가 가진 메소드에 새로운 기능을 추가하여 자기 나름대로의 메소드로 변형, 추가하는 것 • 클래스 AA • 필드 • 필드 1 • 필드 2 • 필드 3 • 메소드 • 필드 1의 값을 표시 • 필드 2의 값을 표시 • 필드 3의 값을 표시 • 클래스 A • 필드 • 필드 1 • 필드 2 • 메소드 • 필드 1의 값을 표시 • 필드 2의 값을 표시

  15. Jframe내 컴포넌트 추가 • 형식 • 객체이름.getContentPane().add(추가할 컴포넌트) • 예) myFrame.getContentPane().add(myButton)

  16. 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) ;

  17. 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" */

  18. setLookAndFeel 메소드가 던질 수 있는 예외 • ClassNotFoundException • InstantiationException • IllegalAccessException • UnsupportedlookAndFeelException

  19. Look & Feel의 반영 • 형식 • SwingUtilities.updateComponentTreeUI(Frame이름) ; 예) SwingUtilities.updateComponentTreeUI(myFrame) ;

  20. 다음 코드를 입력하고 수행하라. • //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) ; } }) ;

  21. 연습 • Motif 스타일로 Look & Feel을 설정하여 프로그램을 수행하라.

  22. 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)) ;

  23. 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) ;

  24. 레이아웃 매니저 • 컴포넌트를 켄테이너 상에 배치 • 종류 • 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의 디폴트 레이아웃 매니저

  25. 레이아웃 매니저 사용 예 //레이아웃 매니저(FlowLayout)의 인스턴스 생성 FlowLayout fLayout = new FlowLayout(FlowLayout.CENTER, 5, 5) ; //컨테이너(프레임)에 레이아웃 세트 myFrame.getContentPane().setLayout(fLayout) ;

  26. //프레임에 컴포넌트 추가 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) ;

  27. 연습 • “***Java World***”라는 타이틀을 갖는 폭 300, 높이 400의 윈도우 프레임을 만들어라.

  28. 연습 • 다음 컴포넌트에 해당하는 사항을 가지고 프로그램하라 • 프레임의 타이틀 • Welcome to Java World! • 프레임의 크기 • 폭: 400, 높이: 200 • 버튼의 캡션 • 눌러 주세요! • 라벨의 캡션 • Powered Java! • 텍스트 필드의 표시 문자열 • 환영 • 텍스트 필드의 열수 • 10

More Related