Black Coffee
JavaFX 란? 본문
반응형
JavaFX
1. JavaFX 란
1.1 JavaFX 개요
- 차세대 웹 개발의 핵심인 RIA(Rich Internet Application) 시장을 공략하기 위해 개발된 언어.
- 데스크탑, 모바일을 대상으로 시각적으로 풍부한 애플리케이션을 빠른 시간에 개발 할 수 있다.
- jdk1.6 update release 10 이상 또는 jdk1.7 에 탑재되어 있음.
- 현재는 Adobe Flex, Microsoft Silverlight에 비해 적게는 4배에서 많게는 14배 까지 느리다.
1.2 JavaFX Script
- 썬에 의해 고안된 스크립팅 언어(scripting language)로서, 자바 플랫폼(Java platform) 상에서 동작하는 JavaFX 제품군의 하나이다.
- 선언적, 정적 형식의 스크립팅 언어이면서 자바 기술의 API를 직접 호출할 수 있어 기존 자바 개발자들이 쉽게 활용할 수 있다.
- 기존의 자바 환경을 최대한 활용하면서 다이내믹한 UI 를 구현할 수 있다.
- 플렉스를 사용할 때 보다 훨씬 적은 양의 코드만으로 거의 유사한 기능을 구현할 수 있다.
- 자바 기술을 사용하여 큰 규모의 프로그램을 만들 수도 있다는 장점을 가지고 있다.
1.3 JavaFX Architecture
2. JavaFX 기본 문법
2.1 데이터타입
- String
- String은 홑('') 또는 겹(쌍, "") 따옴표로 선언.
- String 내부에 중괄호({})를 이용하여 expression 하는 것도 가능하다.
var s1 = 'Hello'; var s2 = "Hello World"; def name = 'Jung Sik'; var s = "Hello {name}"; // s = 'Hello Jung Sik'
- Boolean (java.lang.Boolean과 대응)
- true 와 false 를 표현.
var b:Boolean = true; if(b){ .. }
- true 와 false 를 표현.
- Number 와 Integer
- Number 는 부동소수점 숫자를 나타내며, Integer 는 오직 정수를 표시한다.
var n:Number = 1.5; var i:Integer = 30; def numTwo = 1;
- Number 는 부동소수점 숫자를 나타내며, Integer 는 오직 정수를 표시한다.
2.2 Sequence
- 시퀀스는 순서가 있는 List 객체(Ordered List) 이다.
- 시퀀스의 내부의 각각의 객체를 아이템(item) 이라 한다.
- 시퀀스는 대괄호([], bracket)를 사용하여 선언하며, 각각의 아이템은 콤마(,)로 구분한다.
//기본적인 시퀀스 var weekDays = [JAVA:"Mon","Tue","Wed","Thu","Fri"]; //데이터 타입 지정 시퀀스 var weekDays: String[] = [JAVA:"Mon","Tue","Wed","Thu","Fri"]; //중첩 시퀀스 = var days = [JAVA:"Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; var days = [weekDays, [JAVA:"Sat","Sun"]]; //약식표현 시퀀스 var nums = [JAVA:1..100]; //시퀀스 아이템 접근 println(days[0]); println(sizeof days); for (day in days) { println(day); } //아이템 추가 insert "Thu" before days[2]; insert "Wed" after days[1]; //아이템 삭제 delete "Sun" from days; delete days[0]; delete days;
var nums = [JAVA:1,2,3,4,5]; var numsGreaterThanTwo = nums[n | JAVA:n > 2]; //numsGreaterThanTwo : [JAVA: 3, 4, 5 ] var nums = [JAVA:1,2,3,4,5]; var numsGreaterThanTwo = for (n in nums where n > 2) n ; //numsGreaterThanTwo : [JAVA: 3, 4, 5 ]
- 시퀀스 슬라이스(Slice) 사용
var days = [JAVA:"Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; // [JAVA:"Sat","Sun"] 인덱스 5 와 6 사이의 아이템을 가져온다. var weekend = days[JAVA:5..6]; //[JAVA:"Mon","Tue","Wed","Thu","Fri"] 인덱스 0 과 4(=5보다 작은) 사이의 아이템을 가져온다. var weekdays = days[JAVA:0..<5]; //[JAVA:"Sat","Sun"] 인덱스 5 부터 끝까지의 아이템을 가져온다. weekend = days[JAVA:5..]; // 인덱스 0부터 마지막보다 작은 사이의 아이템을 가져온다.(마지막은 제외) var days2 = days[JAVA:0..<];
2.3 블록구문
- 블록구문은 중괄호로 둘러싸인 선언문과 구문들의 집합이다.
- 가장 마지막 값을 반환한다.
- 어떠한 구문(var나 def 같은)도 포함되어 있지 않다면, 그 블록구문은 Void 타입니다.
var nums = [JAVA:5, 7, 3, 9]; var total = { var sum = 0; for (a in nums) { sum += a // num의 값을 모두 더한다. }; sum; // 합계인 sum을 리턴한다. } println("Total is {total}.");
2.4 Class
- class 키워드로 선언.
- extends 키워드로 상속 가능
- 콤마룰 넣어 다중 상속 가능
- Class 예제1
//클래스 선언 class X { var a: Integer; var b: Integer; function add(a: Integer, b: Integer): Integer { return a + b; } } // 인스턴스 생성 1 var x_object_instance = X { a: 20 b: 30 } //{} 사용 println("----var x_object_instance.a = {x_object_instance.a}"); println("----var x_object_instance.b = {x_object_instance.b}"); println("----x_object_instance.add(x_object_instance.a, x_object_instance.b) = {x_object_instance.add(x_object_instance.a, x_object_instance.b)}"); // 인스턴스 생성 2 var x_object_instance2 = new X(); println("----x_object_instance2.add(5, 6) = {x_object_instance2.add(5, 6)}"); //실행결과 //----var x_object_instance.a = 20 //----var x_object_instance.b = 30 //----x_object_instance.add(x_object_instance.a, x_object_instance.b) = 50 //----x_object_instance2.add(5, 6) = 11
- Class 예제2
// Class 선언 class Address { var street: String; var city: String; var state: String; var zip: String; } // 상수 인스턴스 생성 1 def addressOne = Address { street: "1 Main Street"; city: "Santa Clara"; state: "CA"; zip: "95050"; } // 상수 인스턴스 생성 2 def addressTwo = Address { street: "200 Pine Street"; city: "San Francisco"; state: "CA"; zip: "94101"; } println("----addressOne.street = {addressOne.street}"); println("----addressTwo.street = {addressTwo.street}"); //실행결과 //----addressOne.street = 1 Main Street //----addressTwo.street = 200 Pine Street
- Class 예제3
// class X 선언 class X { var a: Integer; var b: Integer; function add(a: Integer, b: Integer): Integer { return a + b; } } // 클래스 Y 선언 및 X 상속 class Y extends X { // method. function multiply(a: Integer, b: Integer): Integer { return a * b; } } // Y의 인스턴스 생성 var y_object_instance = Y { a: 21 b: 31 } println("----addition = {y_object_instance.add(y_object_instance.a, y_object_instance.b)}"); println("----multiplication = {y_object_instance.multiply(y_object_instance.a, y_object_instance.b)}"); // 실행결과 //----addition = 52 //----multiplication = 651
2.5 바인딩
- bind 키워드 사용
- 동적 할당
var x = 0; def y = bind x; x = 1; println(y); // y 는 1 x = 47; println(y); // y 는 47
- 변수 x를 선언하고, y를 선언해 x를 바인드 시킨다.
- x 값을 변경하고 y값을 프린트 하면, 바뀐 x 값이 출력된다.
- 바운드 된 변수인 y의 값은 x값에 따라 자동으로 업데이트 되어 새로운 값으로 바뀌게 된다.
2.6 bound 함수
var scale = 1.0; bound function makePoint(xPos : Number, yPos : Number) : Point { Point { x: xPos * scale y: yPos * scale } } class Point { var x : Number; var y : Number; } var myX = 3.0; var myY = 3.0; def pt = bind makePoint(myX, myY); println(pt.x); //3.0 * 1.0 = 3.0 myX = 10.0; println(pt.x); //10.0 * 1.0 = 10.0 scale = 2.0; //10.0 * 2.0 = 20.0 println(pt.x); //bound 함수일 경우 결과 값 3.0 10.0 20.0 //bound를 제거 할 경우 결과 값 3.0 10.0 10.0
- scale 변수는 함수의 인자값이 아닌 함수의 외부 변수이다.
- 바운드 함수는 바인드 되어지는 변수에 어떤 값의 변경이 이루어지면 내부적으로 함수의 재호출이 일어나 값이 바뀌게 된다.
3. 예제
3.1 개발환경 구성
- JavaFX SDK 1.1 설치
- Eclipse Plugin 설치
- http://download.java.net/general/javafx/eclipse/com.sun.javafx.eclipse.feature-win32-win32-x86-1.0.1.zip
- Java Project 생성 후 Add JavaFX Nature 실행
3.2 Hello World 작성
-
- New → Empty Script 로 파일 생성 후 소스 작성
- 소스 작성 후 Run → Run Configurations → JavaFX Application 설정
import javafx.scene.Scene; import javafx.scene.paint.Color; import javafx.scene.text.Font; import javafx.scene.text.Text; import javafx.stage.Stage; Stage { title: "Welcome to JavaFX!" scene: Scene { content: [ Text { content: "Hello World!" x:25 y:25 fill: Color.BLACK font: Font{ size: 32 } } ] } }
3.3 이미지 뷰어
- 샘플 참고
4. Reference
- http://www.javafx.com/
- http://www.javapassion.com/javafx/
- http://java.sun.com/javafx/downloads/index.jsp
- http://www.netbeans.org/community/releases/65/
- http://download.java.net/general/javafx/eclipse/com.sun.javafx.eclipse.feature-win32-win32-x86-1.0.1.zip
- http://download.java.net/general/openjfx/plugins/eclipse/site.xml
문서에 대하여
- 작성일자 : 김정식
- 작성자 : 2009년 03월 09일
- 이 문서는 오라클클럽 에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.
=====================================================================================================
출처 : 오라클클럽
반응형
'프로그래밍 > JavaFX' 카테고리의 다른 글
JavaFX 한글화된 페이지?? (0) | 2009.05.02 |
---|---|
JavaFX for Eclipse Tutorial (0) | 2009.01.12 |
JavaFX For Eclipse (0) | 2009.01.08 |
JavaFX 1.0에서 바뀐것들... (0) | 2009.01.06 |
JavaFX 튜토리얼중 animation (0) | 2009.01.05 |
Comments