1 / 24

THE JFC SWING A Guide to Constructing GUIs (Introduction)

THE JFC SWING A Guide to Constructing GUIs (Introduction). Data Warehousing Lab. Cho Hye-Young. Book & Reference http://java.sun.com/docs/books/tutorial/uiswing/index.html The JFC Swing Tutorial A Guide to Constructing GUIs by Kathy Walrath & Mary Campione. INDEX.

adia
Download Presentation

THE JFC SWING A Guide to Constructing GUIs (Introduction)

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. THE JFC SWINGA Guide to Constructing GUIs(Introduction) Data Warehousing Lab. Cho Hye-Young

  2. Book & Reference • http://java.sun.com/docs/books/tutorial/uiswing/index.html • The JFC Swing Tutorial A Guide to Constructing GUIs by Kathy Walrath & Mary Campione INDEX • Getting Started with Swing • Swing Features and Concepts • Using Swing Components

  3. Getting Started with Swing • 1. JFC와 스윙에 대해 • 2. 스윙 프로그램의 컴파일과 실행 • 3. 스윙 애플릿의 실행 • 4. 스윙 애플리케이션의 코드 맛보기

  4. Java Look & Feel CDE/Motif Look & Feel Windows Look & Feel 1. JFC 와 스윙에 대해 • JFC와 스윙이란? • JFC(Java Foundation Classes) • GUI를 구축하는 일련의 기능 요소들을 묶은 것 • JFC 기능 요소 • 스윙 컴포넌트들 • 버튼, 스플리트 창, 테이블 등 • 교체 가능한 외양(pluggable look & feel) 지원 • 외양 즉, GUI의 겉모습과 작동 방식을 선택/교체할 수 있도록 하는 기능 • 접근 지원 API(Accessiblity API) • 화면의 내용을 음성으로 읽어주거나 점자로 출력하는 등의 장애자용 인터페이스에 관련된 기능 • Java 2D API(JDK 1.2 이상) • 고품질의 2D그래픽, 텍스트, 이미지를 애플리케이션이나 애플릿에서 쉽게 사용하는데 관련된 기능 • 드래그-드롭 지원(JDK 1.2 이상) • 자바 애플리케이션과 운영체제 고유의 애플리케이션 사이에서 끌어다 놓기를 지원하는데 관련된 기능 • Swing • 새로운 컴포넌트들과 관련 API를 지칭 • javax.swing 

  5. Top-Level Containers • General-Purpose Containers Applet Dialog Frame Panel Scroll pane Split pane Tabbed pane Tool bar • Special-Purpose Containers • Uneditable Information Displays Label Progress bar Tool tip Internal frame Layered pane Root pane • Editable Displays of Formatted Information • Basic Controls Buttons Combo box List Color chooser File chooser Menu Slider Text fields Table Text Tree 스윙 컴포넌트들 

  6. 1. JFC 와 스윙에 대해 • 스윙 API가 포함된 릴리즈는? • Java 2 SDK, Standard Edition, (J2SE) v 1.4. • JFC 1.1(use JDK 1.1)

  7. 1. JFC 와 스윙에 대해 • 어떤 스윙 패키지를 써야 하는지? • JFC 1.1 release (public packages): javax.accessibilityjavax.swingjavax.swing.borderjavax.swing.colorchooserjavax.swing.eventjavax.swing.filechooserjavax.swing.plafjavax.swing.plaf.basicjavax.swing.plaf.metaljavax.swing.plaf.multijavax.swing.tablejavax.swing.textjavax.swing.text.html javax.swing.treejavax.swing.undo • javax.swing • javax.swing.event(not always required)

  8. 1. JFC 와 스윙에 대해 • 스윙 컴포넌트들과 AWT 컴포넌트들의 차이점? • 스윙 컴포넌트들은 특정 플랫폼에 의존적인 코드가 전혀 포함되지 않고 구현되었다

  9. 1. JFC 와 스윙에 대해 • 스윙 컴포넌트들과 AWT 컴포넌트들의 차이점? • 스윙 컴포넌트들은 AWT 컴포넌트들보다 뛰어난 기능을 제공한다 • 버튼/레이블에 텍스트 뿐만 아니라 이미지도 표시가능 • 대부분의 스윙 컴포넌트들은 테두리의 추가 변경 용이 • 모양이나 행동 변경 용이(메서드 호출, 서브클래스 사용) • 직사각형 이외의 모양도 가능(ex.둥근 버튼) • 보조적 기술들의 스윙 컴포넌트 정보 획득 용이(ex.버틀/레이블의 텍스트) • 스윙 컴포넌트 사용시 주의점 • 스윙 컴포넌트들과 함께 “중량(heavyweight)”컴포넌트들을 사용하면 안된다. • 스윙 컴포넌트들은 “스레드(thread)”에 안전하지 않다. • 스윙 컴포넌트들을 포함하는 윈도우나 애플릿을 위한 포함관계 계통구조(containment hierarchy)의 루트에 스윙의 최상위 컨테이너가 있어야 한다. • JFrame 같은 최상위 컨테이너에 직접 컴포넌트를 추가하지 않는다.

  10. SwingApplication.java 2. 스윙 프로그램의 컴파일과 실행 • 스윙 프로그램의 컴파일과 실행(Java2 Platform) • Step • Java 2 platform 의 최신 release 설치 • 스윙 컴포넌트 들을 사용하는 프로그램 작성 • 프로그램 컴파일 javac -deprecation SwingApplication.java • 프로그램 실행 • Standard Look & Feel java SwingApplication • nonstandard look and feel Solaris: java -classpath .:/home/me/lnfdir/newlnf.jar SwingApplication Win32: java -classpath .;C:\java\lnfdir\newlnf.jar SwingApplication

  11. 3. 스윙 애플릿의 실행 • Step • 브라우저에 적합한 자바 플러그인 또는 applet viewer 다운로드 (JDK 1.1 applet viewer사용의 경우 스윙 JAR파일로드) • 브라우저로 html파일을 연다 • HelloSwingApplet.html • 소스코드 : HelloSwingApplet.java • Html 파일에 applet 끼워 넣는 코드 <APPLET CODE = "HelloSwingApplet.class" CODEBASE = "example-swing" ARCHIVE = "applets.jar" WIDTH = 400 HEIGHT = 50 > <PARAM NAME = CODE VALUE = "HelloSwingApplet.class" > <PARAM NAME = CODEBASE VALUE = "example-swing" > <PARAM NAME = ARCHIVE VALUE = "applets.jar" > <PARAM NAME="type" VALUE="application/x-java-applet;version=1.1.2"> </APPLET>

  12. import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SwingApplication { private static String labelPrefix = "Number of button clicks: "; private int numClicks = 0; public Component createComponents() { final JLabel label = new JLabel(labelPrefix + "0 "); JButton button = new JButton("I'm a Swing button!"); button.setMnemonic(KeyEvent.VK_I); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { numClicks++; label.setText(labelPrefix + numClicks); } }); label.setLabelFor(button); JPanel pane = new JPanel(); pane.setBorder(BorderFactory.createEmptyBorder( 30, 30, 10, 30) ); pane.setLayout(new GridLayout(0, 1)); pane.add(button); pane.add(label); return pane; } 스윙팩키지도입 public static void main(String[] args) { try { UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { } //Create the top-level container and add contents to it. JFrame frame = new JFrame("SwingApplication"); SwingApplication app = new SwingApplication(); Component contents = app.createComponents(); frame.getContentPane().add(contents, BorderLayout.CENTER); //Finish setting up the frame, and show it. frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.pack(); frame.setVisible(true); } } 레이블 설정 외양선택 버튼설정 최상위컨테이너 설정하고 보여주기 컴포넌트추가 이벤트처리 4. 스윙 애플리케이션의 코드 맛보기 • SwingApplication.java

  13. JButton button = new JButton("I'm a Swing button!"); label = new JLabel(labelPrefix + "0 "); label.setText(labelPrefix + numClicks); JFrame frame = new JFrame("SwingApplication"); 4. 스윙 애플리케이션의 코드 맛보기 • SwingApplication.java • 외양의 선택 • UIManager.setLookAndFeel( "com.sun.java.swing.plaf.windows.WindowsLookAndFeel“ ); • setLookAndFeel arguments • UIManager.getCrossPlatformLookAndFeelClassName() • UIManager.getSystemLookAndFeelClassName() • "javax.swing.plaf.metal.MetalLookAndFeel“ • "com.sun.java.swing.plaf.windows.WindowsLookAndFeel“ • "com.sun.java.swing.plaf.motif.MotifLookAndFeel“ • "javax.swing.plaf.mac.MacLookAndFeel" • 스레드 관련 문제 • 보조적 기술들의 지원 • label.setLabelFor(button);

  14. Swing Features and Concepts • 5. 컴포넌트와 컨테이너의 계통적 구조 • 6. 레이아웃 관리 • 7. 이벤트 처리 • 8. 페인팅 • 9. 스레드와 스윙 • 10. 그 외의 스윙 기능들과 개념들 • 11. 스윙 기반 프로그램의 분석

  15. [containment hierarchy] 5. 컴포넌트와 컨테이너의 계통적 구조 • SwingApplication.java • 스윙컴포넌트 • 프레임 또는 메인 윈도우(Jframe) • 패널(Jpane) • 버튼(Jbutton) • 레이블(Jlabel)

  16. 6. 레이아웃 관리 • 레이아웃 관리 • 컴포넌트들의 크기와 위치를 결정하는 과정 • 레이아웃 관리자 • 컨테이너에 담긴 컴포넌트들에 대해 레이아웃 관리를 수행하는 객체 • 레이아웃 관리자 설정 • JPanel pane = new JPanel(); pane.setLayout(new BorderLayout()); • 절대위치방식: 레이아웃 속성을 null 로 지정 • 컴포넌트에 대한 정보제공 • 크기: setMinimumSize, setPreferredSize, setMaximumSize getMinimumSize, getPreferredSize, getMaximumSize • 정렬: setAlignmentX , setAlignmentY getAlignmentX , getAlignmentY 

  17. 1. BorderLayout 2. BoxLayout 3. CardLayout 4. FlowLayout 5. GridLayout 6. GridBagLayout 6. 레이아웃 관리 • 다양한 레이아웃 관리자 

  18. 6. 레이아웃 관리 • 레이아웃 관리가 일어나는 방식 • GUI가 만들어지고 나면, JFrame에서 pack메서드가 호출된다. • 프레임의 레이아웃 관리자가 프레임의 적정 크기를 찾기 위해 프레임의 경계 크기에 프레임이 직접 담고 있는 컴포넌트의 적정 크기를 더한다. • 내용창의 레이아웃 관리자가 내용창의 적정 크기를 구한다. • 레이아웃 관리자가 크기를 물으면, 각 버튼은 우선 사용자가 적정 크기를 지정했는지 점검한다. • 크기 결정 순서 • 포함관계 계통구조의 하위 컴포넌트 -> 상위 컨테이너

  19. event object ----> event listener event listener source ----> event listener ----> event listener 7. 이벤트 처리 • 이벤트 • 이벤트에 대한 정보를 제공하고 이벤트 출처에 통지를 하나의 객체 • 이벤트의 요소 • 인터페이스 구현 • 이벤트 출처(객체)에 이벤트 리스너 등록 • 이벤트 출처와 이벤트 리스너

  20. ActionEvent button -----------------------> action listener 7. 이벤트 처리 • 이벤트 처리부 구현 • 이벤트 처리부 (event handler) 클래스의 요소 • 리스너 인터페이스 구현(Implement) 또는 다른 클래스 확장(expands)할 것인지 지정 코드 public class MyClass implements ActionListener { • 인스턴스 등록 코드 someComponent.addActionListener(instanceOfMyClass); • 리스너 인터페이스의 메서드들을 구현하는 코드 public void actionPerformed(ActionEvent e) { ...//code that reacts to the action... } • 스레드와 이벤트처리 • 이벤트 처리 코드는 하나의 스레드 즉, event dispatching thread 안에서 실행된다.

  21. 8. 페인팅 • 페인팅의 작동방식 • AWT 페인팅 시스템 • 스윙 GUI가 자신을 다시 그릴 필요가 생기는 경우 과정조절 • 스윙 리페인트 관리자 • 컴포넌트를 명시적으로 다시 그려지게 한다. • 컴포넌트의 크기나 위치가 자동 재조정되지 않는 경우 repaint 이전에 revalidate호출해야 한다. • 더블 버퍼링 • 화면을 부드럽게 갱신하기위해, 메모리 상의 버퍼에서 페인팅 작업후, 모두 그려지면 화면에 뿌리는 방식 • 페인팅순서(SwingApplicaiton.java) • 최상위 컨테이너 -> 하위 컴포넌트 ex.SwingApplication.java Jframe-> 내용창->Jpanel->Jbutton,JLabel

  22. 9. 스레드와 스윙 • 단일 스레드 규칙 • 스윙 컴포넌트들은 한 시점에서 단 하나의 스레드, event dispatching로부터만 접근 되어야한다. • 한 스윙 컴포넌트가 실현된 후에는 그 컴포넌트의 상태에 영향을 주거나 상태에 의존하는 모든 코드는 반드시 이벤트 발송 스레드 안에서 실행되어야한다. • 단일 스레드 규칙의 예외 • 일부메서드들은 스레드에 안전하다 This method is thread safe, although most Swing methods are not. Please see Threads and Swing for more information. • 애플리케이션의 GUI는 메인 스레드에서 생성, 표시되기도한다. • 애플릿의 GUI는 init메서드 안에서 생성 표시될 수 있다. • Jcomponent의 메서드들 중 repair와 revalidate는 어떤 스레드에서 호출해도 안전하다. • 리스너 목록들은 어떤 스레드에서도 수정할 수 있다. addListenerTypeListener, removeListenerTpyeListener • 이벤트 발송 스레드가 아닌 형태로 GUI 작업수행의 경우 • 실제 작업 이전에 시간이 오래 걸리는 초기화 작업을 수행하는 프로그램 • 비표준적인 이벤트의 결과로 갱신되는 GUI를 사용하는 프로그램

  23. 10. 그외의 스윙 기능들과 개념들 • Jcomponet가 제공하는 기능들 • J로 시작하는 컴포넌트는 최상위 컨테이너를 제외하고 모두 JComponent 클래스로부터 상속 • 아이콘 • 버튼, 레이블에 이미지 표시 • 액션 • 액션 이벤트를 발생시킨 둘 또는 그이상의 컴포넌트들 사이에 데이터 공유 • 교체가능한 외양 • 여러가지 Look & Feel 을 사용자가 선택하거나, 프로그램 안에서 지정 • 보조적 기술의 지원 • Accessbility API를 이용 - 스윙 컴포넌트 정보 획득 • 데이터와 상태 모델의 분리 • 컴포넌트들을 좀더 효율적으로 다루고 컴포넌트 사이에서 데이터와 상태를 쉽게 공유하게 함. (ex.ButtonModel)

  24. 11. 스윙 기반 프로그램의 분석 • Converter.java • 미터법 단위와 U.S 단위(인치, 피트, 야드 등)사이에서 길이를 변환하는 프로그램 • 컴포넌트들 • Jframe 한 개 • 커스텀 Jpane 2개 • 커스텀 JTextField 2개 • JSlider 2개 • JComboBox 2개 • 레이아웃 관리자 • Gridlayout 1개 • Boxlayout 4개 • 분리된 모델 • 텍스트 필드 위한 데이터 모델 1개 • 슬라이더의 데이터 모델 2개 • 이벤트처리 • 액션리스너 • 변경리스너 • 윈도우리스너

More Related