JFace HelloWorld

Trong bài này, bạn sẽ làm quen với JFace bằng một chương trình đơn giản đầu tiên "HelloWorld".

 

Trình độ: Cơ bản về Java

Yêu cầu: Eclipse 3.2
Hãy làm theo các bước như sau.

1. Tạo một Java Project tên là JFaceDemo

2. Tạo một class tên là HelloWorld như sau:

package com.javaquan.tutorials.jface;

import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.widgets.Display;

public class HelloWorld extends ApplicationWindow{

public HelloWorld() {
super(null);
}

public static void main(String[] args) {
HelloWorld demo = new HelloWorld();
demo.setBlockOnOpen(true);
demo.open();
Display.getCurrent().dispose();
}
}



Giải thích đôi chút:



  • hàm setBlockOnOpen(true) để khi window được mở, nó giữ trạng thái mở cho đến khi người dùng nhấn nút Close
  • chương trình sẽ dừng ở dòng :demo.open() cho đến khi người dùng nhấn nút Close thì chương trình sẽ chạy tiếp đến lệnh tiếp theo là Display.getCurrent().disposeI(). Lệnh này có tác dụng giải phóng cửa sổ.

3. Chạy thử chương trình


Nhấn chuột phải vào HelloWorld trong Package Explorer và chọn Run as\Java Application



Bạn sẽ thấy một cửa sổ trắng xóa, không có nội dung và title. Bước cơ bản vậy là đã hoàn thành. Bây giờ bạn hãy chỉnh sửa đôi chút để cửa sổ mới tạo đẹp mắt hơn.

Thêm mắm thêm muối


1. Bạn cần override method createContents


...
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
...
public Control createContents(Composite parent) {
Shell shell = parent.getShell();
shell.setSize(320, 240);
shell.setText("HelloWorld window title");
return parent;
}



Phương thức này được gọi sau khi tất cả các widget đã được vẽ, nhưng trước khi window được hiển thị. Đây chính là nơi chúng ta chỉnh sửa thuộc tính của window, cũng như thêm các widget khác như Label, Text,Button, ComboBox...


2. Thêm một vài widget:


Bạn hãy tạo một composite là "con" (child) của Composite parent. Sau đó thì đặt các widget vào trong composite con này. Đương nhiên, lệnh return của createContents() sẽ trả về composite con chứ không phải parent.


import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.SWT;
...
public class HelloWorld extends ApplicationWindow{
...
Text textYourName;
Button button1;
public Control createContents(Composite parent) {
Shell shell = parent.getShell();
shell.setSize(320, 240);
shell.setText("HelloWorld window title");

Composite composite = new Composite(parent,SWT.NONE);
composite.setLayout(new RowLayout());

new Label(composite,SWT.NONE).setText("Your name:");

textYourName = new Text(composite,SWT.BORDER);
textYourName.setText("Enter your name here !");

button1 = new Button(composite,SWT.PUSH);
button1.setText("Send");

return composite;
}
}


Chạy thử chương trình xem nào !




3. Thêm chức năng cho button "Send".  Đơn giản bạn chỉ việc add một Listener như sau:


button1.addSelectionListener(new SelectionListener(){

public void widgetDefaultSelected(SelectionEvent arg0) {
// TODO Auto-generated method stub

}

public void widgetSelected(SelectionEvent arg0) {
MessageDialog msgBox;
String strMsg = "Hello ";
strMsg = strMsg.concat(textYourName.getText());
msgBox = new MessageDialog(
null,
"HelloWorld",
null,
strMsg,
MessageDialog.INFORMATION,
new String[]{"OK"},
0);
msgBox.open();

}

});



Bây giờ mỗi khi người dùng nhấn nút Send, một dialog sẽ hiển thị một câu chào "Hello ...".
Như vậy là chúng ta đã hoàn thành bài đầu tiên rất cơ bản về JFace.
Trong các phần tiếp theo chúng ta sẽ cùng tìm hiểu các widget khác như menu,statusbar,treeViewer....




Download source code của ví dụ trên

Gặp lại vào hôm sau.

(Xem chi tiết)

How to install Eclipse plugins?

Eclipse cung cấp khả năng mở rộng "gần như không hạn chế" bằng việc cài đặt mới các plugin. Bạn có thể tìm thấy rất nhiều plugin miễn phí cũng như thương mại tại các địa chỉ sau:

 

1. Eclipse Plugin Central 

2. Eclipse Plugins

3. SourceForge.net

Để cài đặt Eclipse plugins, có 2 cách:

  1. Download và extract plugin vào thư mục ECLIPSE_HOME\plugins



  2. Một số plugin cho phép bạn vào menu Help\Software Updates\Find and Install ... để cài đặt.

 

 

 

Bạn chọn "Search for new features to install" (Option đầu tiên dùng để update những plugin đã cài đặt)

 

 Tiếp theo bạn click vào "New Remote Site..." và nhập vào Name & URL của plugin

 

Nhấn "Finish" để hoàn tất.

Eclipse sẽ tự động download và cài đặt plugin cho bạn. Khi quá trình hoàn tất, Eclipse sẽ đòi hỏi bạn restart Eclipse để kích hoạt plugin mới.

Trục trặc kỹ thuật  - Troubleshooting

Đôi khi trong quá trình cài đặt plugin, bạn chắc chắn đã copy plugin vào thư mục ECLIPSE_HOME\plugins, sau đó khởi động lại Eclipse nhưng vẫn không thấy plugin xuất hiện. Trong trường hợp này, bạn cần chạy lệnh sau ở DOS Prompt:

Hoặc để thuận tiện bạn có thể download file startclean.bat và copy vào thư mục ECLIPSE_HOME để mỗi khi cài đặt plugin thì chạy file này.

Ghi chú: ECLIPSE_HOME là thư mục bạn cài đặt Eclipse. Ví dụ C:\Java\Eclipse

Xem thêm:

Eclipse Plugin: Create a simple Wizard

Liferay Eclipse Plugin

(Xem chi tiết)

Google Code Prettifier

Dùng công nghệ JavaScript và CSS, Google Code Prettifier giúp bạn format các đoạn code của các ngôn ngữ lập trình như Java, C, HTML, Python, SQL, JavaScript, CSS... trong trang HTML.

Cài đặt đơn giản.

Bước 1: Chèn đoạn code sau (với đường dẫn thích hợp) vào đầu trang HTML:

<link href="prettify.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="prettify.js"></script>



Bước 2: Add onload="prettyPrint()" trong tab <body>

Sử dụng


Đặt đoạn code cần format trong


 <pre class="prettyprint">...</pre> 


hoặc


<code class="prettyprint">...</code>


đoạn code đó sẽ tự động được format.


Xem thêm chi tiết tại: Project Home , Demo

(Xem chi tiết)

Xử lý lỗi OutOfMemoryException khi fill những report quá lớn

Khi tạo những Report với dữ liệu lớn, JasperReport thường bị tràn bộ nhớ trong quá trình fill data. Bạn sẽ gặp phải exception OutOfMemoryException

Không nên hốt hoảng. JasperReports có tính năng chia nhỏ một report lớn thành những phần nhỏ hơn (gọi là segment) để xử lý. Những segment này được lưu trữ tạm thời trong một thư mục TEMP do bạn chỉ định trên ổ cứng.

Tất cả những gì phải làm thật đơn giản. Bạn chỉ cần set built-in parameter REPORT_VIRTUALIZER
Xin xem đoạn code ví dụ dưới đây:


//Create connection to database server
connection = ConnectionPool.getConnection();

//Create a cache at C:\Temp

JRFileVirtualizer fileVirtualizer = new JRFileVirtualizer(3, "c:\\Temp");

//Set parameter REPORT_VIRTUALIZER
HashMap parameterMap = new HashMap();
parameterMap.put(JRParameter.REPORT_VIRTUALIZER, fileVirtualizer);

//Fill data as usual
JasperFillManager.fillReportToFile("MyReport.jasper", parameterMap,connection);



Chúc thành công!

(Xem chi tiết)

Viết các portlet hỗ trợ đa ngôn ngữ

Bài viết trình bày thao tác cơ bản để viết các portlet đa ngôn ngữ trong Liferay Extension Environment

1 - Nguyên tắc cơ bản:

Không bao giờ viết các Key liên quan đến ngôn ngữ (title, message, label) một cách trực tiếp trong file jsp. Bạn hãy lưu tất cả các Key này trong file Language-ext.properties (đối với ngôn ngữ là English)

Đối với các ngôn ngữ khác bạn cũng lưu trong các file Language-ext_countrycode.properties (Lưu ý: dấu gạch dưới, underscore, chứ không phải dấu trừ, minus).
See also:ISO 3166 Codes (Countries)

Ví dụ cụ thể đối với một số ngôn ngữ thông dụng:

  • tiếng Việt: Language-ext_vn.properties
  • tiếng Đức: Language-ext_de.properties
Các file Language_ext.properties được lưu trữ trong thư mục: liferay\ext\ext-ejb\classes\content



2 - Format của file Language_ext.properties
Các file .properties có format vô cùng đơn giản như sau:
Key = value

Comment (ghi chú) bắt đầu bằng dấu thăng #

Ví dụ 1: File Language_ext.properties (English)
## This is the comment
## Portlet names
##

javax.portlet.title.EXT_1=Reports

## This is the comment
## Messages
##

view-reports=View Reports
product=Product


Ví dụ 2: File Language_ext_vn.properties (tiếng Việt)
## Đây là phần ghi chú
## Tên Portlet
##

javax.portlet.title.EXT_1=Báo cáo

## Đây là phần ghi chú
## Messages
##

view-reports=Xem báo cáo
product=Sản phẩm


Lưu ý: phần value không đặt trong dấu quote ("" hoặc '')



3 - Sử dụng (key,value) như thế nào trong file JSP:
Bây giờ chúng ta đã có danh sách các cặp (key,value) trong file .properties, mỗi lần cần lấy giá trị của Key trong file JSP, bạn sử dụng lệnh sau:

<%=LanguageUtil.get(pageContext, "Ở đây bạn đặt KEY")%>


Ví dụ 3: Tạo 1 Button View Report trong file JSP

<input class="portlet-form-button" type="submit"

value="<%=LanguageUtil.get(pageContext,"view-report")%>">

Chúc thành công !

(Xem chi tiết)

Giới hạn danh sách ngôn ngữ được hỗ trợ

Theo mặc định thì Liferay hỗ trợ rất nhiều ngôn ngữ, trong đó có cả tiếng Việt :).

Trong khi xây dựng website, thực sự bạn khó có thể hỗ trợ được hết các ngôn ngữ trong danh sách đó, sức người có hạn mà ;). Đa số chúng ta đáp ứng được việc hỗ trợ tiếng Anh và tiếng Việt. Trong khi hỗ trợ được có 2 ngôn ngữ mà lại để danh sách một tá quốc kỳ các nước ở Footer như thế thì không sợ bị người ta nói là "treo đầu dê bán thịt chó" sao. Vậy làm cách nào để giới hạn danh sách này lại.

Lúc đầu tôi thấy danh sách các lá cờ nằm ở Footer, nên cố gắng tìm code có liên quan ở file template của theme. Vô ích! Thực sự chỉ cần chỉnh sửa trong file portal-ext.properties là xong.

Bước 1:
Mở file ext\ext-ejb\classes\portal-ext.properties


Bước 2:
Chèn đoạn code sau vào cuối file (or anywhere)

##
## Languages and Time Zones
## Supported Language: English (US), French, German, Spanish
locales=en_US,fr_FR,de_DE,es_ES


Bước 3:
Stop Tomcat, chạy CMD, rồi gõ lệnh sau

C:\>cd C:\Projects\liferay\ext
C:\Projects\liferay\ext>ant clean deploy

Bước 4: Start Tomcat, kiểm tra kết quả trên browser:




Chúc bạn thành công !

(Xem chi tiết)

Eclipse Plugin: Tạo Wizard đơn giản (3)

Summary: How to make a Liferay Eclipse Plugin
View in English

Theo dự định Liferay Eclipse Plugin sẽ phát hành bản đầu tiên vào cuối tháng 4/2007

(Xem chi tiết)