1. Trang chủ
  2. » Công Nghệ Thông Tin

Tạo một ngôn ngữ mô tả UI XML pot

61 359 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tạo một ngôn ngữ mô tả UI XML pot
Tác giả Arron Ferguson
Người hướng dẫn Giảng viên Arron Ferguson
Trường học British Columbia Institute of Technology
Chuyên ngành Khoa học máy tính
Thể loại Đề tài tốt nghiệp
Định dạng
Số trang 61
Dung lượng 810,61 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Hãy khám phá cách tạo một bộ thẻ UI XML khai báo với một khung làm việc Java™ đi kèm mà phân tích cú pháp, xác thực, xây dựng, và cuối cùng là liên kết các thành phần GUI được mô tả đến

Trang 1



Tạo một ngôn ngữ mô tả UI XML

Trang 2

Tạo một ngôn ngữ mô tả UI XML

Xây dựng UI (giao diện người dùng) và khung làm việc đi kèm trong ngôn ngữ Java

Arron Ferguson, Giảng viên, British Columbia Institute of Technology

Tóm tắt: Việc viết ra các GUI (giao diện người dùng đồ hoạ) bằng mã chương

trình có thể thường dẫn đến các lựa chọn thiết kế lộn xộn, đến lượt nó lại trở nên

mờ nhạt giữa các logic nghiệp vụ (business logic) và mã UI Hãy khám phá cách tạo một bộ thẻ UI XML khai báo với một khung làm việc Java™ đi kèm mà phân tích cú pháp, xác thực, xây dựng, và cuối cùng là liên kết các thành phần GUI được mô tả đến các quy tắc nghiệp vụ vào lúc chạy

Giới thiệu

Sự phát triển GUI có thể là một công việc mệt mỏi Các khung làm việc GUI không phải lúc nào cũng được giải thích rõ bằng văn bản, và khối lượng mã yêu cầu có thể phát triển nhanh chóng, làm giảm tốc độ luồng phát triển Trên tất cả, các công cụ kéo và thả và các IDE hỗ trợ các khung làm việc GUI này thường có thể hướng nhà phát triển phần mềm GUI về tạo bộ mã không thể quản lý và không thể đọc được Việc này có thể làm mờ nhạt thêm đường phân cách giữa các quy tắc nghiệp vụ và bộ mã mô tả GUI mà có thể làm cho việc bảo trì của phần mềm

đó thêm khó khăn

Các từ chữ viết tắt (acronyms) thường sử dụng

 API: Application programming interface - Giao diện Lập trình Ứng dụng

 DOM: Document Object Model - Mô hình Đối tượng Tài liệu

Trang 3

 GUI: Graphical user interface - Giao diện Người dùng Đồ họa

 HTML: Hypertext Markup Language - Ngôn ngữ Đánh dấu Siêu văn bản

 IDE: Integrated Development Environment - Môi trường Phát triển Tích hợp

 JAR: Java Archive - Định dạng tệp nén của Java

 UI: User interface - Giao diện Người dùng

 URI: Uniform Resource Identifier - Bộ định danh Tài nguyên Thống nhất

 XML: Extensible Markup Language - Ngôn ngữ Đánh dấu Mở rộng

 XSD: XML Schema Infoset Model - Mô hình Infoset lược đồ XML

 W3C: World Wide Web Consortium - Tổ hợp World Wide Web,

Đây là nơi ngôn ngữ UI mô tả trở nên tiện lợi Một UI ngôn ngữ mô tả “cái gì,” không phải là “ra sao” Thí dụ, HTML mô tả nội dung hiển thị, không trả về các chức năng dùng để trả về nội dung Bằng cách không quy định “ra sao” trong các ngôn ngữ mô tả, luồng điều khiển cũng được loại ra Mặc dù sự mất mát này nghe

có vẻ như là một sự hạn chế, nó trở thành một sức mạnh, như một tác dụng phụ — chẳng hạn như sửa đổi toàn bộ trạng thái (thí dụ các biến) hoặc gọi ra các hàm hoặc phương thức khác — được loại bỏ Việc chọn ra một ngôn ngữ mô tả cũng đưa ra lợi ích của việc tách riêng mã UI khỏi mã ứng dụng Việc tách riêng này có thể đem lại các lợi ích tương lai chẳng hạn như phân biệt rõ ràng giữa vai trò dự án

và vai trò tổ nhóm mà thậm chí có thể giảm bớt chi phí tích hợp các quy tắc

nghiệp vụ với nhiều khung nhìn hoặc công nghệ khung nhìn

Trang 4

Ngày nay, có khá nhiều mẫu UI XML mô tả đang sử dụng Các hệ điều hành Linux® và UNIX® sử dụng môi trường máy tính bàn GNOME có Glade Những người dùng Microsoft® Windows® có Ngôn ngữ Đánh dấu Ứng dụng Mở rộng được (XAML), hỗ trợ tập hợp nhiều đặc tính, gồm việc lồng vào mã trong XML Định dạng MXML của Adobe® Flex® Framework mô tả các GUI cho trình chơi nhạc Adobe Shockwave (SWF) và cả việc lồng vào mã Xem mục Tài nguyên để

có các liên kết đến nhiều thông tin hơn

Một tập hợp các yêu cầu cho một khung làm việc UI mô tả cơ sở trong công nghệ Java có thể là:

Xác thực (Validation): Sử dụng lược đồ XML

A DOM: Một DOM thông lệ để xử lý các đặc điểm riêng chẳng hạn như

duy trì sự đồng bộ trạng thái thành phần GUI và trạng thái nút XML

Persistence: Sắp xếp theo thứ tự (Marshalling) và sắp xếp không theo thứ

tự (unmarshalling) của GUI

Image data: Lưu lại như dữ liệu Base64

Swing components: Việc trình bày các thành phần Swing thường được sử

dụng nhiều hơn để phát triển GUI

Với các yêu cầu này trong đầu, bây giờ là lúc tạo XML mô tả

XML mô tả

Trang 5

Một cố gắng đầu tiên ở định dạng XML, trong Liệt kê 1, trình bày một cửa sổ đơn giản, bảng panel, và nút Các thuộc tính thấy trong Liệt kê 1 đại diện về cơ bản cho các đặc tính được đòi hỏi, chẳng hạn như hệ tọa độ, kích thước, và các định danh duy nhất, tham chiếu đến các thành phần trong-bộ-nhớ riêng lẻ

Liệt kê 1 Khái niệm XML mô tả

<xui:GridLayout height="1" width="1"></xui:GridLayout>

<xui:Panel id="panel_0" x="0" y="0" name="Hello Panel"

width="1" height="1">

<xui:GridLayout height="1" width="1"></xui:GridLayout>

<xui:Button x="0" y="0" width="1" height="1" id="button_0"

label="Press Me" enabled="true" selected="true" orientation="horizontal"/>

</xui:Panel>

Trang 6

Khung làm việc sử dụng một lược đồ XML Lược đồ XML cho phép áp đặt sắp xếp thứ tự xác định, thứ bậc, và các kiểu dữ liệu trong một cá thể lược đồ Đây là điều quan trọng; khung làm việc sẽ chờ đợi một tập hợp các phần tử XML nào đó của các kiểu được quy định và theo một thứ tự riêng Liệt kê 2 trình bày các phần

tử và thuộc tính ban đầu của hệ thống phân cấp trong một cá thể lược đồ XML

Liệt kê 2 Lược đồ UI XML mô tả: Các phần tử ban đầu

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema elementFormDefault="qualified"

Trang 7

<xs:element minOccurs="0" maxOccurs="128" ref="xui:Window"/>

<xs:element minOccurs="0" maxOccurs="1" ref="xui:Resource"/>

Trang 8

</xs:sequence>

<xs:attribute name="uri" type="xs:anyURI" use="required"/>

<xs:attribute name="class" type="xs:token" use="required"/>

<xs:attribute name="type" use="required">

Trang 9

<xs:attribute name="id" type="xs:ID" use="required"/>

<xs:attribute name="x" type="xs:short" use="required"/>

<xs:attribute name="y" type="xs:short" use="required"/>

<xs:attribute name="width" type="xs:unsignedShort" use="required"/>

<xs:attribute name="height" type="xs:unsignedShort" use="required"/>

Trang 10

<xs:attribute name="name" type="xs:string" use="required"/>

<xs:attribute name="visible" type="xs:boolean" use="required"/>

</xs:complexType>

</xs:element>

<xs:element name="GridLayout">

<xs:complexType>

<xs:attribute name="width" type="xs:unsignedShort" use="required"/>

<xs:attribute name="height" type="xs:unsignedShort" use="required"/>

Trang 11

 elementFormDefault="qualified" trình bày rằng tất cả các phần tử phải có một vùng tên — hoặc là một tiền tố hoặc một vùng tên mặc định

 targetNamespace="http://xml.bcit.ca/PurnamaProject/2003/xui" quy định URI vùng tên đích

 Cá thể lược đồ sử dụng XML W3C Schema Recommendation và tất cả các phần tử trong nó (xmlns:xs="http://www.w3.org/2001/XMLSchema")

 xmlns:xui="http://xml.bcit.ca/PurnamaProject/2003/xui" xác định một không gian tên nữa và tiền tố đi kèm của nó

Việc sử dụng các không gian tên trong một XSD là rất quan trọng: Nó loại bỏ

xung đột về không gian tên Một xung đột không gian tên xảy ra khi có từ hai phần

tử trở lên từ hai hay nhiều định dạng XML có cùng một tên Xung đột này gây ra

sự nhầm lẫn cho bất kỳ ứng dụng nào quan tâm đến bộ thẻ tương ứng của nó Bằng cách sử dụng các không gian tên và các tiền tố không gian tên đi kèm, bạn tránh được hoàn toàn vấn đề này

Tiếp theo, phần tử kiểu dữ liệu mức gốc XUI nói rõ rằng:

 Cho phép một chuỗi từ 0 đến 128 các phần tử Window và cuối cùng là một phần tử Resource Cả hai phần tử này là phần tử quy chiếu tìm thấy sau này trong cá thể lược đồ

 Có thuộc tính id được đòi hỏi và phải thuộc kiểu anyURI

Phần tử XUI (có thể) chứa nhiều phần tử Window mặc dù nó có thể không có các phần tử Window dựa trên một giá trị 0 trong thuộc tính minOccurs Đối với phần

tử Resource:

Trang 12

 Nó có một mô hình nội dung rỗng do phần tử rỗng xs:sequence của nó xs:sequence

 Nó có ba thuộc tính, tất cả đều được yêu cầu

 Thuộc tính cuối cùng, thuộc tính type, tạo một kiểu đơn giản dẫn xuất từ kiểu được định nghĩa của XSD (token), nơi mà mặt hạn chế là enumeration,

có tính đến các giá trị bằng chữ được liệt kê của java và groovy

Mục đích của phần tử Resource là cung cấp khung làm việc Java mà URI của một tài nguyên (một JAR, trong trường hợp này) chứa các lớp Java được biên dịch mà

có thể được nạp vào thời gian chạy và được liên kết đến Tài nguyên này dựa vào một lớp riêng (giá trị của thuộc tính class mà sẽ được gọi ra, về bản chất đưa ra một lớp được biểu hiện ra mà sẽ trả lời tất cả các sự kiện được tạo từ GUI

Trang 13

java.awt.GridBagLayout trong môi trường Java loại trừ mà không gặp bất kỳ sự phức tạp nào

Cho đến lúc này, rõ ràng là Lược đồ XML là có ý nghĩa đáng kể Liệt kê 3 trình bày một vài phần tử nữa

Liệt kê 3 Lược đồ UI XML mô tả: nhiều phần tử hơn

<xs:attribute name="modal" type="xs:boolean" use="required"/>

<xs:attribute name="idref" type="xs:IDREF" use="optional"/>

<xs:attribute name="name" type="xs:string" use="required"/>

<xs:attribute name="id" type="xs:ID" use="required"/>

Trang 14

<xs:attribute name="x" type="xs:short" use="required"/>

<xs:attribute name="y" type="xs:short" use="required"/>

<xs:attribute name="width" type="xs:unsignedShort" use="required"/>

<xs:attribute name="height" type="xs:unsignedShort" use="required"/>

<xs:attribute name="visible" type="xs:boolean" use="required"/>

<xs:element maxOccurs="1" minOccurs="1" ref="xui:GridLayout"/>

<xs:choice minOccurs="0" maxOccurs="unbounded">

<xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:Button"/>

<xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:Calendar"/>

<xs:element minOccurs="0" maxOccurs="unbounded"

ref="xui:CheckBox"/>

<xs:element minOccurs="0" maxOccurs="unbounded"

Trang 15

ref="xui:ComboBox"/>

<xs:element minOccurs="0" maxOccurs="unbounded"

ref="xui:HypertextPane"/>

<xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:Image"/>

<xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:Label"/>

<xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:List"/>

<xs:element minOccurs="0" maxOccurs="unbounded"

<xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:SliderBar"/>

<xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:Table"/>

<xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:TextArea"/>

<xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:TextField"/>

<xs:element minOccurs="0" maxOccurs="unbounded" ref="xui:Tree"/>

</xs:choice>

</xs:sequence>

Trang 16

<xs:attribute name="x" type="xs:unsignedShort" use="required"/>

<xs:attribute name="y" type="xs:unsignedShort" use="required"/>

<xs:attribute name="width" type="xs:unsignedShort" use="required"/>

<xs:attribute name="height" type="xs:unsignedShort" use="required"/>

<xs:attribute name="name" type="xs:string" use="required"/>

<xs:attribute name="id" type="xs:ID" use="required"/>

<xs:attribute name="idref" type="xs:IDREF" use="optional"/>

<xs:attribute name="label" type="xs:string" use="required"/>

<xs:attribute name="x" type="xs:unsignedShort" use="required"/>

Trang 17

<xs:attribute name="y" type="xs:unsignedShort" use="required"/>

<xs:attribute name="width" type="xs:unsignedShort" use="required"/>

<xs:attribute name="height" type="xs:unsignedShort" use="required"/>

<xs:attribute name="enabled" type="xs:boolean" use="required"/>

<xs:attribute name="selected" type="xs:boolean" use="required"/>

<xs:attribute name="id" type="xs:ID" use="required"/>

<xs:attribute name="orientation" use="required">

Trang 18

Hãy lưu ý là thông tin trạng thái ổn định được lưu trữ — thông tin trạng thái duy nhất có thể trợ giúp trong việc tái cấu trúc các thành phần GUI Một thí dụ là thông tin trạng thái của phần tử CustomDialogt:

 Số lượng các phần tử Panel cho phép trong hội thoại

 Hội thoại theo kiểu mô thái không (Một hội thoại mô thái bẫy trọng tâm đến khi người dùng đóng hội thoại lại.)

Hệ tọa độ (x và y tính theo pixel) trong máy tính để bàn

 Kích thước (chiều rộng và chiều cao tính theo pixel)

 Tầm nhìn của cửa sổ

Một bảng Panel là một vùng chứa trung bình và cho phép một số lượng khá lớn các thành phần nguyên tử được chứa Xem lại Liệt kê 3, Panel có chính xác một GridLayout và một sự chọn lựa không có thành phần nguyên tử được đặt bên trong

Panel này hoặc nhiều như cần thiết Panel tự nó có hệ toạ độ x và y Tuy nhiên,

khác với việc tham chiếu đến các pixel trong máy tính bàn (như CustomDialog

tiến hành), Panel sử dụng hệ toạ độ x và y để tham chiếu đến việc định vị trong

GridLayout của vùng chứa cha Như một con búp bê Nga, kết cấu lồng nhau này bắt chước rất giống với nguyên tắc bố trí của Swing Với toàn bộ cái này ở đúng chỗ, đây là lúc để nhằm đến việc cài đặt phần mềm

Hỗ trợ khung làm việc Java

Trang 19

Chúng ta hãy bắt đầu bằng một tổng quan về khung làm việc Java dự kiến Bộ mã trong Liệt kê 4 trình bày các bước mà lập trình viên ứng dụng phải thực hiện theo

để tạo một ứng dụng

Liệt kê 4 Khái niệm các cuộc gọi API Java

try {

// Gain access to a XUI builder through factory

// In this framework the term XUI is going to represent the custom DOM

XUIBuilder builder = XUIBuilderFactory.getInstance().getXUIBuilder(); // (1)

// Validate and parse (unmarshal) the XML document

builder.parse("browser.xml"); // (2)

// Build a custom DOM

XUI xui = builder.getXUIDocument(); // (3)

// Create 1:1 GUI component mapping to custom DOM

Trang 20

xui.visualize(); // (4) (5)

// Create bindings to data model (i.e JAR file from Resource element)

xui.bind(); // (6)

// Get root node from the XUI document

XUINode root = xui.getRoot();

// Save a copy of the DOM to file (marshal)

Trang 21

} catch (IOException ioe) {

ioe.printStackTrace();

}

Các bước trong Liệt kê 4 định nghĩa một sự tách biệt rõ ràng về chức năng và có tính đến sự tinh tế hơn của các thành phần của khung làm việc Một cố gắng về việc hình dung luồng này chỉ ra trong Hình 1 Các số khoanh tròn trong Hình 1 trùng hợp với số được bình luận trong Liệt kê 4 mặc dù mã trình bày hai bước bổ sung (lấy lại một tham chiếu đến nút gốc XUI và sự lưu tổ chức dữ liệu DOM thành tệp) Đó là các bước:

Mô hình Đối tượng Tài liệu là gì?

Một Mô hình Đối tượng Tài liệu (viết tắt là DOM) là một việc ánh xạ của các phần

tử XML thành các đối tượng trong bộ nhớ (được một API cung cấp) như vậy cho phép các lập trình viên đọc dữ liệu XML vào các đối tượng trong bộ nhớ (gọi là unmarshalling), thao tác dữ liệu, và sau đó viết dữ liệu trở lại thành XML (gọi là marshalling) DOM nổi tiếng và thường sử dụng nhất là W3C DOM

Hình 1 minh hoạ các bước sau đây

1 Một Builder được lấy ra từ một BuilderFactory

2 Builder trước tiên đảm bảo rằng tài liệu XML đã được xác thực và được phân tích cú pháp trước khi nó cho phép lấy một tài liệu XUI Nếu việc phân tích cú pháp hoặc xác thực thất bại, một XUIParseException sẽ xuất hiện và khung làm việc sẽ hủy bỏ việc nạp tài liệu

Trang 22

3 Builder tạo DOM nơi các đối tượng phản ánh các phần tử XML được đọc vào

4 Một đối tượng Realizer, được gọi ra bên trong bởi đối tượng XUI, là một thể hiện và sẵn sàng thực hiện bước tiếp theo

5 Sự hiểu biết rõ ở chỗ khung làm việc tạo hệ thống phân cấp các thành phần GUI dựa trên hệ thống phân cấp của các nút XML đã tạo trước đó (lõi thực của công cụ của khung làm việc)

6 Sử dụng khả năng phản chiếu trong môi trường Java, logic mô hình (một phần của ứng dụng điều khiển UI) được gắn với các thành phần GUI đã được nhận biết

Hình 1 Luồng khung làm việc và khung nhìn chi tiết của các bước mà API

Trang 23

XUI thực hiện để xây dựng nên một GUI

Luồng gọi ra sáu bước này dễ sử dụng nhưng chứa một sự xáo trộn về các thông báo và việc thuyết minh các đối tượng được cài đặt ẩn (under the hood), đáng được khám phá tiếp theo Phần trung tâm của khung làm việc là ở các bước 5 và 6

Cấu tạo thành phần GUI & nút XML

Trong Hình 1, bước 5 tạo một mô hình thành phần Việc này cho phép ghép đôi một nút XML (bây giờ là một đối tượng trong bộ nhớ) với thành phần GUI Việc ghép đôi này đòi hỏi một sự đồng bộ hoá rất nghiêm ngặt của các sự kiện sau:

 Đối với mỗi XUINode (đối tượng trong bộ nhớ đại diện cho bất kỳ phần tử XML nào) được khung làm việc đọc vào, một XUIComponent phải được tạo để bao quanh XUINode

Trang 24

 Đối với mỗi XUIComponent đã tạo trong bộ nhớ, một đồng đẳng GUI, chẳng hạn như một javax.swing.JFrame, phải được tạo

 Mỗi khi một cá thể XUIComponent — hoặc một trong những kiểu con của

nó, chẳng hạn như một XUIButton— được sửa đổi (thí dụ, khi kích thước được thay đổi), XUIComponent sẽ đảm bảo rằng cả XUINode và đồng đẳng GUI sẽ được cập nhật đồng thời và tương đương

Bằng cách đáp ứng các yêu cầu trên đây, khung làm việc cho phép lập trình viên đọc tài liệu XML (unmarshalling), sửa đổi DOM, và lưu thay đổi vào một tài liệu XML (marshalling) Các lập trình viên thậm chí có thể tạo các DOM mới theo chương trình và tổ chức lưu dữ liệu chúng

Sắp xếp thứ tự nút DOM

Để cho một XUINode tự sắp xếp thứ tự dữ liệu như XML, một cài đặt tuỳ chỉnh của phương thức toString được đưa ra (trong Liệt kê 5) Nút gốc có thể chứa nhiều nút con Mỗi nút con có thể chứa tập hợp các nút con của chính nó v.v… Bằng việc gọi ra phương thức toString của nút ở mức gốc, khung làm việc có thể dễ dàng sắp xếp thứ tự toàn bộ tài liệu XML Các vùng tên được bổ sung và mỗi phần

tử được tạo nên với thông tin về cấp độ của nó trong hệ thống phân cấp (thông qua biến level) Với cách đó, khi phương thức toString được gọi, nó dành nơi ngoài để

dễ đọc tài liệu này theo cách thủ công

Liệt kê 5 Cài đặt phương thức XUINode toString

@Override

Trang 25

public String toString() {

StringBuffer sb = new StringBuffer();

// get namespaces for this node

Enumeration keys = nameSpaces.keys();

Trang 26

String names = "";

while(keys.hasMoreElements()) {

String uri = (String)keys.nextElement();

String prefix = (String)nameSpaces.get(uri);

/* if its the xsi namespace (XML Schema Instance),

* ignore it, this isn't part of that namespace but it is

* needed for the XML Schema validator to work */

Trang 27

}

// do attributes if there are any

if(attributes.getLength() > 0) {

int length = attributes.getLength();

for(int i = 0; i < length; i++) {

String attributeValue = attributes.getValue(i);

String attributeQName = attributes.getQName(i);

sb.append(" " + attributeQName + "=\"" + attributeValue + "\"");

}

}

sb.append(">");

sb.append(cdata);

int size = childNodes.size();

for(int i = 0; i < size; i++) {

XUINode e = (XUINode)childNodes.get(i);

sb.append(e.toString());

Trang 28

Bổ sung vào một thành phần vùng chứa

Một mục khác đáng khám phá là kiểu vùng chứa XUIWindow, kiểu con gián tiếp của XUIComponent Việc cài đặt XUIWindow đại diện cho một thành phần

Trang 29

javax.swing.JFrame và do đó phải cho phép các thành phần con sẽ được bổ sung vào sắp đặt Liệt kê 6 trình bày việc cài đặt Bước đầu tiên là đảm bảo rằng chỉ các kiểu thành phần nhất định có thể được bổ sung vào XUIWindow Nếu như vậy thì thể hiện nút DOM của XUIComponent, một XUINode, được lấy lại để truy cập các đặc tính của thành phần đó Lưu ý rằng việc này đòi hỏi tất cả các hàm dựng của XUIComponent khởi tạo các giá trị này

Một việc kiểm tra xa hơn được thực hiện để đảm bảo rằng thành phần này là một vùng chứa trung bình (thí dụ một XUIPanel) rằng vùng chứa trung bình vừa hợp trong lưới của các hàng và cột của XUIWindow Cuối cùng, thành phần đó có thể được bổ sung vào XUIWindow bằng cách đảm bảo thành phần đó được kích hoạt, được thiết lập đúng vị trí trong lưới bố trí, và rằng XUINode (biến win) của

XUIWindow được cung cấp một tham chiếu đến XUINode của thành phần con mới— lời gọi addChildNode()

Liệt kê 6 Cài đặt Phương thức addComponent của XUIWindow

public void addComponent(XUIComponent component) throws

XUITypeFormatException {

if(component instanceof XUIBasicDialog

|| component instanceof XUIOpenFileDialog

|| component instanceof XUICustomDialog

|| component instanceof XUIMenuBar

Trang 30

|| component instanceof XUIPanel

|| component instanceof XUISplitPanel

|| component instanceof XUITabbedPanel

|| component instanceof XUISaveFileDialog) {

// get the node

XUINode node = component.getNodeRepresentation();

if(!(component instanceof XUIMenuBar)) {

int x = Integer.parseInt(node.getAttributeValue("x"));

int y = Integer.parseInt(node.getAttributeValue("y"));

int width = Integer.parseInt(node.getAttributeValue("width"));

int height = Integer.parseInt(node.getAttributeValue("height"));

// can't add dialogs so need to check for type here

if(component instanceof XUIBasicDialog

|| component instanceof XUIOpenFileDialog

|| component instanceof XUICustomDialog

Ngày đăng: 07/08/2014, 10:22

HÌNH ẢNH LIÊN QUAN

Hình 2. Ảnh chụp màn hình của trình duyệt Web - Tạo một ngôn ngữ mô tả UI XML pot
Hình 2. Ảnh chụp màn hình của trình duyệt Web (Trang 58)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN