Eclipse界面編寫實例(2)--理解佈局1

本文檔的原文在eclipse網站:http://www.eclipse.org/articles/Understanding%20Layouts/Understanding%20Layouts.htm

 winion翻譯整理 Copyright © 2001 Object Technology International, Inc.

摘要

採用

SWT編寫應用程序時,通常需要使用佈局layouts來設計美觀的界面。一個佈局管理着在Composite上面的子組件的大小和位置。佈局類是抽象類Layout的子類。本文檔介紹如何使用標準佈局類,以及如何編寫自定義佈局類。

原作者Carolyn MacLeod, OTI  March 22, 2001 

修訂Shantha Ramachandran, OTI May 02, 2002

        翻譯 winion 2004.9.19

第一節 概述

1.1 佈局概述

       當使用標準部件庫(SWT)編寫應用程序時,通常需要使用通常需要使用佈局layouts來設計美觀的界面。一個佈局管理着在Composite上面的子組件的大小和位置。SWT提供了及格標準的佈局類,並且可以自定義佈局類。

       SWT中,組件的位置和大小不是自動佈置的。應用程序可以在初始化時計算Composite的子組件的大小和位置,也可以通過Resize監聽器來調整。如果沒有給定子組件的大小,那麼它們的尺寸將默認爲0,因而界面上顯示不出來。

       下圖演示了幾個在佈局中常用的概念。一個Composite(圖示是一個TabFolder)有一個位置(location)、客戶區(clientArea)和修飾區(trim)。Composite的大小就是客戶區大小加上修飾區大小。本例的Composite有兩個子組件並列排放。Layout用來管理子組件的大小和位置,它可以定義子組件之間的距離(spacing),子組件和邊界之間的空白大小(margin)。Layout的大小和Composite的客戶區大小一致。

    一個組件的首選的尺寸(preferred size)是顯示大的內容所需的最小的尺寸。對容器而言,其大小是包含所有子組件的最小的矩形。如果子組件由應用程序放置,容器根據子組件的大小和位置來計算它的首選尺寸。如果容器使用佈局類來放置子組件,它就要求Layout來計算它的客戶區尺寸,然後加上修飾區,從而得出它的首選尺寸。

1.2 標準佈局

SWT中的標準佈局類有:

l         FillLayout:以相同的大小單行或單列的排列組件;

l         RowLayout:以單行或多行的方式使用fill,wrap,spacing,等選項排列組件;

l         GridLayout:在格子中排列組件;

l         FormLayoutSWT 2.0的新特性):通過創建組件各個邊的“附件”來排列組件。

要使用標準佈局類,需要引入SWT佈局類包:

   import org.eclipse.swt.layout.*;

       佈局是可插入的。要設置Composite組件的佈局,使用setLayout(Layout)方法。一下代碼演示了,一個ShellComposite的子類)採用RowLayout來佈局它的子組件。

   Shell shell = new Shell();

   shell.setLayout(new RowLayout());

       一個佈局類可以有一個相應的佈局數據類(Object的子類),可以對指定的子控件設置具體的佈局方式。爲了使用方便,佈局數據類的名字是通過替換佈局類的LayoutData而得到。例如,標準佈局類RowLayout的佈局數據類是RowDataGridLayoutt的佈局數據類是GridDataFormLayout的佈局數據類是FormData。以下代碼演示瞭如何設置組件的佈局數據:

   Button button = new Button(shell, SWT.PUSH);

   button.setLayoutData(new RowData(50, 40));

1.3 本文檔使用的例子

       本文檔的多數屏幕截圖是根據不同變量運行下面示例代碼得到的。可以更改佈局的類型、參數以及子組件的類型和數量:

import org.eclipse.swt.*;

import org.eclipse.swt.widgets.*;

import org.eclipse.swt.layout.*;

public class LayoutExample {

   public static void main(String[] args) {

       Display display = new Display();

       Shell shell = new Shell(display);

       //創建佈局

       RowLayout layout = new RowLayout();

       // 設置可選的選項

       layout.wrap = true;

       // 設置到容器上

       shell.setLayout(layout);

       // 創建容器的子組件

       new Button(shell, SWT.PUSH).setText("B1");

       new Button(shell, SWT.PUSH).setText("Wide Button 2");

       new Button(shell, SWT.PUSH).setText("Button 3");

       shell.pack();

       shell.open();

       while (!shell.isDisposed()) {

          if (!display.readAndDispatch()) display.sleep();

       }

   }

}

運行上面的代碼,得到下圖:

如果調整上面的界面,使右面放置不下Button 3,那麼RowLayout將折行,在下一行顯示Button 3,如圖:

       使用佈局受調整大小的很大限制。因此本文檔的多數例子演示瞭如果容器變大或變小將如何佈局,以此說明佈局的工作原理。

 

(待續)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章