Eclipse介面編寫執行個體(2)–理解布局1

來源:互聯網
上載者:User

本文檔的原文在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         FormLayout(SWT 2.0的新特性):通過建立組件各個邊的“附件”來排列組件。

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

   import org.eclipse.swt.layout.*;

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

   Shell shell = new Shell();

   shell.setLayout(new RowLayout());

       一個布局類可以有一個相應的布局資料類(Object的子類),可以對指定的子控制項設定具體的布局方式。為了使用方便,布局資料類的名字是通過替換布局類的Layout為Data而得到。例如,標準布局類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,

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

 

(待續)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.