TrưỜng đẠi học khoa học tự nhiên khoa công nghệ thông tin nguyễn mạnh luân-mai ngọc sưƠng nghiên cứu và phát triển bpel designer sử dụng công nghệ javafx khóa luận tốt nghiệp cử nhân cntt tp. Hcm, 2010



tải về 0.84 Mb.
trang7/7
Chuyển đổi dữ liệu21.12.2018
Kích0.84 Mb.
1   2   3   4   5   6   7

JAVAFX SCRIPT

      1. Mixin Classes

JavaFX hộ trợ một dạng kế thừa được gọi là kế thừa mixin. Để hộ trở dạng kế thừa này, JavaFX bao gồm một kiểu đặc biệt được gọi là mixin. Mộ class mixin cung cấp các đặc điểm vững chắc cho các lớp con kế thừa. Chúng không thể tự khởi tạo. Một class mixin thì khác so với mộ interface trong Java, đó là mixin có thể cung cấp các thực thi mặc định cho các phương thức của nó và cung có thể khai báo và khởi tạo cho các biến của nó.

Để khai báo một Class Mixin trong JavaFX, bạn cần dùng từ khóa Mixin trong lúc khai báo. Ví dụ:



public class My Positioner extends Positioner {

public override function bottomY(node: Node,

within: Node, padding: Number) : Number {

within.layoutBounds.height - padding -

node.layoutBounds.height;

}

}



Một class mixin có thể bao gồm nhiều phương thức được khai báo. Các lớp con muốn thực thi các phương thức của lớp Mixin thì nó phải sử dụng từ khóa override khi khai báo phương thức đó. Nếu phương thức Mixin không ở dạng thực thi nó phải được khai báo ở dạng dẫn xuất , các lớp con cần phải khai báo override nếu muốn thực thi phương thức đó. Ví dụ:

public abstract function bottomY(node: Node,

within: Node, padding: Number) : Number.




Class con phải thực thi chức năng này sử dụng từ khóa override. Cách làm như sau :

public class My Positioner extends Positioner {

public override function bottomY(node: Node,

within: Node, padding: Number) : Number {

within.layoutBounds.height - padding -

node.layoutBounds.height;

}

}




Nếu có hai mixin có cùng phương thức hoặc cùng tên biến, hệ thống sẽ giải quyết phương thức hoặc biến dựa trên mixin nào được khai báo trước trong mệnh đề extends. Để chỉ định một phương thức hoặc một biến xác định, sử dụng tên Class mixin cùng với tên của phương thức hoặc biến, ví dụ :

public class My Positioner extends Positioner,

AnotherPositioner {

var offset = 10.0;

public override bound function

centerX(node: Node, within: Node) : Number {

Positioner.centerX(node, within) + offset;

}

}


Các Mixin cũng có thể định nghĩa các biến, có hoặc không có giá trị mặc định và triggers. Class con cũng kế thừa những biến này hoặc overrider việc khai báo biến. ví dụ :

public mixin class Positioner {

public var offset: Number = 10.0;

}

public class My Positioner extends Positioner {



public override var offset = 5.0 on replace {

println("{offset}");

}

}


Nếu một class kế thừ từ một Class JavaFX và nhiều lớp mixins. Các Class JavaFX sẽ được ưu tiên hơn so với các lớp Mixin trong việc khởi tạo biến. Nếu biến được khai báo trong Class cha, giá trị mặc định chỉ định trong Class cha thì được sử dụng. Nếu không có giá trị mặc định chỉ định trong Class cha, thì Giá trị mặc định cho kiểu dữ liệu của biến được sử dụng. Đối với các Class mixin, sự ưu tiên dựa vào thứ tử chúng được định nghĩa sau từ khóa extends. Nếu một biến được khai báo trong một mixin có một giá trị khởi tạo, và biến này được override lại mà không có giá trị mặc định trong lớp cha, thì lúc này giá trị khởi tạo trong mixin được sử dụng.

Các lớp mixin cũng có thể có các phương thức init và postinit. Mixin init và postinit thì được thực this au khi các phương thức Init và Postinit của Class cha đã thực thi và trước các phương thức Init và Postinit của các Class con. Init và Postinit của các Class minix được thực thi theo thứ tự chúng khai báo sau từ khóa extends của Class con.



      1. Object Literals

Trong JavaFX, các đối tượng được khởi tạo sử dụng object literals. Đây là một cú pháp khai báo sử dụng tên của class mà bạn muốn tạo ra, sau đó là một danh sách các khởi tạo và định nghĩa. Ví dụ:

var title = Title {

text: "JavaFX is cool"

x: 10

y: 50


onMouseClicked: function(e:MouseEvent):Void {

// do something

}

};


Khi khai báo một object literal, các biến phải được ngăn cách bởi dấu phẩy(,) hoặc khoảng trắng

Bạn cũng có thể override các phương thức trừu tượng bằng việ khai báo object literal. Ví dụ sau đây tạo ra đối tượng giao diện java.awt.event.ActionListener và override lại phương thức trừu tượng void actionPerformed(ActionEvent e):



import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

var listener = ActionListener {

override function

actionPerformed(e: ActionEvent) : Void {

println("Action Performed!");

}

}




      1. Variables

JavaFX hộ trở hai kiểu biến : instance và script. Các biến Script giữ trạng thái cho toàn bộ script, ngược lại, biến instance giữ trạng thái cho các khai báo Class trong file Script.

Có 2 dạng biến cơ bản : unassignable và changeable. Biến Unassignable được khai báo sử dụng từ khóa def và phải gán giá trị mặc định không bao giờ thay đổi.



Các biến này không thể gán giá trị, override hoặc khởi tạo các biến bên trong object, , chúng được xem như biến hằng số. tuy nhiên chúng thì không hẳn là hằng số và có thể tham gia vào binding.

Script variables thì được khai báo bên ngoài khai báo Class, trái lại, các biến hằng thì được khai báo bên trong khai báo Class. Nếu có một biến Script được khai báo với phạm vi truy cập là public, protected hoặc package, nó có thể sử dụng bên ngoài file script, bằng cách tham chiếu đến tên đầy đủ của nó, tên đầy đủ này là sự hợp nhất của tên Package, tên Script và tên biến, theo sau là tên đầy đủ của biến script từ Class javafx.scene.Cursor đối với con trỏ crosshair

Biến hằng thì được khai báo bên trong một khai báo Class khi một đối tượng được tạo ra, ví dụ sau đây sẽ minh họa một vài script và các biến hằng:



import javafx.scene.Cursor;

import javafx.scene.paint.Color;



// import of script variable from javafx.scene.Cursor

import javafx.scene.Cursor.CROSSHAIR;



// Unchangeable script variable

def defaultText = "Replace ME"; // Script accessible only



// Changeable script variable

public var instanceCount: Integer; // Public accessible

public class Title {

// Unchangeable instance variables

def defStroke = Color.NAVY; // class only access,



//resolves to javafx.scene.paint.Color.NAVY

// Changeable instance variables

// defaults to the empty String ""

public var text:String;

public var width: Number; // defaults to zero (0.0)

public var height = 100; // Infers Integer type

public var stroke: Color = defaultStroke;

public var strokeWidth = 1.0; // Infers Number type

public var cursor = CROSSHAIR;

//resolves to javafx.scene.Cursor.CROSSHAIR

...


}


Chú ý một vài cách khai báo, bao gồm kiểu dữ liệu, Khi một biến không được khai báo, kiểu dữ liệu của biến sẽ được đưa ra từ giá trị được gán cho nó. String, Number, Interger và Boolean là các kiểu được xây dựng sẵn, những kiểu khác là các Class của JavaFX hoặc Java

Sau đây là danh sách các biến và phạm vi của chúng:



Bạn cũng có thể khai báo các Change triggers trên 1 biến. Các Change triggers là các xử lý của JavaFX script, chúng sẽ được gọi khi giá trị của các biến thay đổi. Để khai báo Change Trigger, sử dụng cú pháp on replace



public var x:Number = 100 on replace {

println("New value is {x}");

};

public var width: Number on replace (old) {



println("Old value is {old}, New value is {x}");

}




      1. Sequences (mảng)

Sequence là một danh sách có thứ tự các đối tượng. Bởi vì danh sách thứ tự thì được sử dụng thường xuyên trong việc lập trình, JavaFX hổ trợ sequence như một đặc điểm trước tiên của Class. Việc khai bao sequences thì được hổ trợ sẵn sequences, inserting, delecting và modifying các items trong sequence, đồng thời cũng có sự hộ trở mạnh mẽ trong việc rút trích các items từ sequence.

  • Cách khai báo

Để khai báo một sequence, sử dụng dấu ngoặc vuông với mỗi item ngăn cách nhau bởi dấu phẩy. Ví dụ :

public def monthNames = ["January", "February", "March",

"April", "May", "June",

"July", August", "September",

"October", "November", "December"];



Sequence này là một sequence các Strings, bởi vì mỗi phần tử bên trong đấu ngoặc vuông là các String. Chúng cũng có thể khai báo như sau :

public def monthNames: String[] = [ "January", .....];

Để khởi tạo một sequence rỗng, chúng ta sử dụng đấu ngoặc vuông “[ ]”, đây là giá trị mặc định của sequence. Ví dụ : hai dòng sau đây cùng khởi tạo một sequence rỗng:

public var nodes:Node[] = [];

public var nodes:Node[];



Khi sequence thay đổi, bạn có thể sử dụng một phương thức trigger để thực thi sự thay đổi đó, phần này sẽ được thảo luận chi tiết hơn trong chương tiếp theo.

Khai báo nhanhmột sequence interger và Number sử dụng một dãy, một số bắt đầu và một số kết thúc, như vậy [1..9] là 1 sequence bao gồm các số interger từ 1 đến <9 hay từ 1 đến 8. Bạn cũng có thể sử dụng phương thức step, ví dụ : [2..100 step 2], đối với phân số [0,1 .. 1,0 step 0,1], nếu không có từ khóa step thì mặc định của nó sẽ là 1 hoặc 1,0.

Dãy này củng có thể theo thứ tự giảm, để làm được việc này, số đầu tiên phải lớn hơn số thứ hai. Tuy nhiên, không có phương thức step phủ định.


var negativeNumbers = [0..-10]; // Empty sequence

var negativeNumbers = [0..-10 step -1]; // 0,-1,-2,...-10

var negativeNumbers = [0..<-10 step -1]; // 0,-1,-2,...,-9


Để tạo ra các sequence mà bao gồm các phần tử từ các sequences khác, bằng cách gọi các sequence trong đấu ngoặc vuông, ví dụ :

var negativePlusEven = [ negativeNumbers, evenNumbers ];

Tương tự, bạn cũng có thể sử dụng các sequence khác để tạo ra một sequence bằng cách sử dụng toán tử Boolean. Sequence khác được sử dụng như đầu vào, và một toán tử Boolean thì gắn tới mổi phần tử trong sequence đầu vào, và các phần tử từ sequence đầu vào hợp lệ được cho vào sequence mới. Ví dụ :

var evenIntegers = positiveIntegers[n | n mod 2 == 0];

Bạn cũng có thể chỉ định một sequence từ cấu trúc for loop, mổi đối tượng được trả về từ cấu trúc for loop sẽ được thêm vào sequence

// creates sequence of Texts

var lineNumbers:Text[] = for(n in [1..100]) {

Text { content: "{n}" };

};

// creates Integer sequence, using indexof operator



var indexNumbers = for(n in nodes) {

indexof n;

};

Để lấy kích thước hiện tại của sequence, sử dụng toán tử sizeof:



var numEvenNumbers = sizeof evenNumbers;



  • Cách truy xuất một mảng

Để truy suất đến các phần tử,JavaFx sử dụng chỉ mục chỉ định vị trí của phần tử trong sequence, đặt trong đấu ngoặc vuông

var firstMonth = monthNames[0];

Bạn cũng có thể chia nhỏ 1 sequence bằng cách cung cấp một dãy, ví dụ :



var firstQuarter = monthNames[0..2];

var firstQuarter = monthNames[0..<3];


Hai sequence trên là bằng nhau, hoặc ta có cú pháp lấy giá trị của sequence từ vị trí index đến phần tử cuối



var fourthQuarter = monthNames[9..11 ];

var fourthQuarter = monthNames[9.. ];



Sử dụng for loop:

for( month in monthNames) {

println("{month}");

}




  • Gán giá trị vào mảng

Để thay thế một phần tử trong sequence, và gấn cho nó một giá trị mới tại vị trí nào đó

var students = [ "joe", "sally", "jim"];

students[0] = "vijay";


Ghi chú : do JavaFX là một ngôn ngữ có khả năng sửa lỗi, cho nên khi bạn gán giá trị cho sequence tại một vị trí nằm ngoài kích thước của nó, thì javaFX sẽ bỏ qua.

Tóm lại, nếu bạn gán giá trị tại một vị trí bên ngoài phạm vi của sequence thì giá trị mặc định sẽ được trả về, đối với Numbers thì đó là zero, đối với Strings thì đó là chuỗi rổng, và đối với đối tượng thì nó sẽ là null.

Để thêm 1 phần tử vào sequence, sử dụng từ khóa insert:



// add "vijay" to the end of students

insert "vijay" into students;



// insert "mike" at the front of students

insert "mike" before students[0];



// insert "george" after the second student

insert "george" after students[1];


Để xóa một phần tử, sử dụng từ khóa delete



delete students[0]; // remove the first student

delete students[0..1]; // remove the first 2 students

delete students[0..<2]; // remove the first 2 students

delete students[1..]; // remove all but the first student

delete "vijay" from students;

delete students; // remove all students





      1. Native Array

Native array là một đặc điểm mà cho phép bạn tạo ra các mảng trong Java. Đặc điểm này chủ yếu sử dụng để giữ các đặc điểm của mảng trong JavaFx và Java, ví dụ trong việc tạo ra mảng Java : in []array như sau:

var ints: nativearray of Integer = [1,2,3] as nativearray of Integer;

Native arrays thì không giống như sequences, mặc dù có vài nét tương đồng. Bạn không thể sử dụng toán tử sequence, như insert, delete or slices. Dù thế nào đi nữa, bạn có thể gán các phần tử như mảng vậy, ví dụ:

ints[2] = 4;

Tuy nhiên, nếu bạn gán giá trị ngoài phạm vi của mảng, bạn sẽ nhận một thông báo lỗi ArrayIndexOutOfBounds Exception.

Bạn cũng có thể sử dụng toán tử for để duyệt các phần tử trong native array. Ví dụ :



for(i in ints) {

println(i);

}

for(i in ints where i mod 2 == 0) {



println(i);

}




      1. Functions

Các phương thức định nghĩa hành vì, chúng đóng gói các câu lệnh , các tham số và có thể trả về kết quả hoặc một thông báo lỗi. Giống như biến, các phương thức cũng là các phương thức script hoặc là các phương thức hằng số. Các phương thức Script hoạt động tại mức script và truy suất đến các biến và các phương thức khác được định nghĩa tại mức script. Các phương thức hằng định nghĩa hành vi của các đối tượng và truy suất đến các biền và phương thức hằng bao gồm bên trong Class khai báo phương thức. Hơn thế nữa, 1 phương thức hằng có thể truy suất bất cứ biến hoặc phương thức của script mà được khai báo trong cùng một file script.

Để khai báo phương thức, sử dụng 1 phạm vi truy suất, public, protected hoặc package, sau đó sử dụng từ khóa function và tên của function. Nếu không sử dụng phạm vi truy suất thì phương thức sẽ được đặt phạm vi là private đối với file script. Bất kỳ tham số nào cũng có thể khai báo trong dấu ngoặc đơn. Sau đó, bạn có thể chỉ định kiểu dữ liệu mà phương thức trả về. Nếu bạn không khai báo kiểu trả về, phương thức sẽ trả về kiểu dữ liệu được suy ra từ biến mới nhất trong phương thức. Kiểu trả về Void có thể được sử dụng để cho biết phương thức không trả về giá trị nào hết.

Trong ví dụ sau, hai khai báo phương thức là như nhau, phương thức đầu tiên trả về kiểu Glow, bởi vì biến cuối cùng mà phương thức xử lý là 1 biến bên trong đối tượng Glow, Phương thức thứ hai khai báo trả về kiểu Glow, và sử dụng từ khóa return:


public function glow(level: Number) {

// return type Glow inferred

Glow { level: level };

}

public function glow(): Glow { // explicit return type



return glow(3.0); // explicit return keyword

}


Từ khóa return là một tùy chọn được sử dụng như giá trị trả về trong một phương thức. Tuy nhiên, nếu bạn muốn trả về ngày lập tức trong điều kiện rẻ nhánh if/else hoặc loop. Bạn phải sử dụng từ khóa return.

Trong JavaFX, các phương thức là các đối tượng bên trong và của chính nó, và có thể được gán cho 1 biến. ví dụ, khai báo một biến phương thức, gán một phương thức cho biến, và sau đó gọi phương thức thông qua biến.

Định nghĩa phương thức cũng có thể cũng được che khuất. ví dụ cho 1 biến phương thức:


var glowFunction:function(level:Number): Glow =

function(level:Number) {

Glow { level: level };

};


Hoặc với khai báo trong object literal

TextBox {

columns: 20

action: function() {

println("TextBox action");

}

}


Sử dụng toán tử override để override một phương thức từ Class cha

class MyClass {

public function print() { println("MyClass"); }

}

class MySubClass extends MyClass {



override function print() { println("MySubClass"); }

}




      1. Expressions Operators

  • Block Expression

Một Block là một dánh sách các tham số, bao gồm các biến được khai báo tường minh hoặc các tham số nằm bên trong dấu ngoặc nhọn. nếu tham số cuối cùng là một tham số tường minh, giá trị của block là giá trị của tham số cuối cùng đó, ngược lại, block không trình bày giá trị nào. ví dụ dưới đây cho thấy hai block, tham số đầu tiên có giá trị là một con số, đó là biến subtotal, block thứ hai không mang giá trị nào đối với phương thức println() khai báo như kiểu void

// block expression with a value

var total = {

var subtotal = 0;

var ndx = 0;

while(ndx < 100) {

subtotal += ndx;

ndx++;

};

subtotal; // last expression



};

//block expression without a value

{

var total = 0;



var ndx = 0;

while(ndx < 100) {

total += ndx;

ndx++;


};

println("Total is {total}");

}




  • Exception Handling

Trả ra các dòng thông báo giống như bên Java và nó được đưa ra từ lớp java.lang.Throwable

Dòng lệnh try/catch/finally thì giống bên Java, nhưng sử dụng cú pháp của JavaFX



try {

} catch (e:SomeException) {

} finally {

}




  • Operators

Sau đây là các toán tử trong JavaFX, với cột Priory thể hiện độ ưu tiên của toán tử, và Meaning cho biết chức năng của toán tử

d:\study\document\bpel_baocao\tailieuthamkhao\phuluc\image.jpg



Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7


Cơ sở dữ liệu được bảo vệ bởi bản quyền ©tieuluan.info 2019
được sử dụng cho việc quản lý

    Quê hương