by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

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){
        ..
      }
      
  • Number 와 Integer
    • Number 는 부동소수점 숫자를 나타내며, Integer 는 오직 정수를 표시한다.
      var n:Number = 1.5;
      var i:Integer = 30;
      def numTwo = 1; 
       

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;
  • Boolean Expression을 사용한 subset 구성
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 개발환경 구성

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

문서에 대하여

  • 작성일자 : 김정식
  • 작성자 : 2009년 03월 09일
  • 이 문서는 오라클클럽 에서 작성하였습니다.
  • 이 문서를 다른 블로그나 홈페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.