??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲av区一区二区三,亚洲伦理中文字幕,人人狠狠综合久久亚洲高清http://m.tkk7.com/leopallas/category/7348.htmlzh-cnTue, 27 Feb 2007 11:12:36 GMTTue, 27 Feb 2007 11:12:36 GMT60Eclipse Forms: Rich UI for the Rich Client(译,W三部分)http://m.tkk7.com/leopallas/articles/30165.htmlLeoLeoFri, 10 Feb 2006 07:42:00 GMThttp://m.tkk7.com/leopallas/articles/30165.htmlhttp://m.tkk7.com/leopallas/comments/30165.htmlhttp://m.tkk7.com/leopallas/articles/30165.html#Feedback0http://m.tkk7.com/leopallas/comments/commentRss/30165.htmlhttp://m.tkk7.com/leopallas/services/trackbacks/30165.html高lg(Complex controls)
Eclipse Forms提供?个高U组?q样你能够构建漂亮的UI:expandable composite,section,image hyperlink和form text.让我们依ơ仔l看看它们每一?

Expandable composite
在网中有个普遍的功能就是让你有能力把一部分|页内容用一个按?wbr>来׾~它.Eclipse Forms提供了这样一个组?ExpandableComposite.

 ExpandableComposite ec = toolkit.createExpandableComposite(form.getBody(), 
ExpandableComposite.TREE_NODE|
ExpandableComposite.CLIENT_INDENT);
ec.setText("Expandable Composite title");
String ctext = "We will now create a somewhat long text so that "+
"we can use it as content for the expandable composite. "+
"Expandable composite is used to hide or show the text using the "
"toggle control";
Label client = toolkit.createLabel(ec, ctext, SWT.WRAP);
ec.setClient(client);
td = new TableWrapData();
td.colspan = 2;
ec.setLayoutData(td);
ec.addExpansionListener(new ExpansionAdapter() {
public void expansionStateChanged(ExpansionEvent e) {
form.reflow(true);
}
});

q个composite接受一些风格参数来控制它的表现行ؓ.TREENODE风格会用树组件中的按钮来伸展或收~内?TWISTIE 风格则会创徏一个方行的按钮.使用EXPANDED,则初始状态是伸展?如果用COMPACT风格,lg会报告和标题宽度相合适的宽度q且呈现收羃? ?最?CLIENT_INDENT会内容与标题对?否则,内容是按照组件的宽度).

ExpandableComposite有责d理按钮组件和标题.能扩展和收羃的客L件必Lexpandablecomposite直接的child. 我们需要ؓlgd伸展监听器ƈ"通知(reflow)"form在状态改变时.q是因ؓ伸展改变了expandable composite的大?但是在parent下一ơ布局前对parent没有M影响(因此需要强行告诉它).大体?wbr>,每次你form的layout改变?你需?reflow"q个form."Reflowing"q个form会让所有组?wbr>按照新的寸布局q更新滚动条.

我们的视囄在看h象这P
 

?1Q一个收~状态的expandable composite例子

当你点击标题?+"?composite伸展出ƈ展示客户:
?2Qexpandable composite呈展状?/div>

expandable composite用到了一个内部layout,q个layout实现了Eclipse Forms ILayoutExtension接口.因此你能够把它加C用TableWrapLayout布局的parent?p我们上面例子中做的一?

D落(Section)
Eclipse Forms定制的组件中最versatile之一是Section.它承了expandable compositeq介l了以下的概念:
1.分隔?Separator)-一个能够在标题下创建的separatorlg.
2.描述(Description)-在标题下的可选的描述.
3.标题?Title bar)-能在标题下的一个标题栏(注意separator和标? 栏不能同时?

下面的代码和expandable composite代码例子差不多:
 Section section = toolkit.createSection(form.getBody(), 
Section.DESCRIPTION|Section.TITLE_BAR|
Section.TWISTIE|Section.EXPANDED);
td = new TableWrapData(TableWrapData.FILL);
td.colspan = 2;
section.setLayoutData(td);
section.addExpansionListener(new ExpansionAdapter() {
public void expansionStateChanged(ExpansionEvent e) {
form.reflow(true);
}
});
section.setText("Section title");
section.setDescription("This is the description that goes "+
below the title");
Composite sectionClient = toolkit.createComposite(section);
sectionClient.setLayout(new GridLayout());
button = toolkit.createButton(sectionClient, "Radio 1", SWT.RADIO);
button = toolkit.createButton(sectionClient, "Radio 2", SWT.RADIO);
section.setClient(sectionClient);

q次我们用了TWISTIE风格,d了描qƈ要求有标题栏.q个视图看v来应该象q样Q?/div>
 

?3Q一个有标题栏和描述的可伸展的section

囄链?Image hyperlink)
囄链接是链接的子类,它在链接文字上面d了一个图?q个q_的结合非常有意义.q个lg可以只是一个图?当没有设|Q何文字时),或是囄加链?囄在正?hover,ȀzL的状态都能设|?

下面是一个用囄链接的例子Q?/p>

囄14QEclipseƢ迎面中的form
Form textlg
使标{?labels),链?囄和TableWrapLayout相结?能够创徏出复杂和强大的forms.但是仍然有一些事是很隑ց?wbr>.考虑PDE manifest~辑器的例子Q?br> 
囄15Q一个؜合了文本,囄和超链接的复杂Eclipse form例子

注意囄,链接和文本是如何؜合的.q里使用单独的标{֒链接组件是很困隄.Z解决q个问题,Eclipse Forms插g提供了一个强大的文本lg,它有以下功能Q?br>识别普通包裹的文本
识别普通文?但是如果以http://开头的文本以超链接昄
识别象HTML语言一L文本

在所有模式下,form textlg能识别一个字W串或输入流(input stream).

识别普通文?标签模式)
FormText formText = toolkit.createFormText(form.getBody(), true);
 td = new TableWrapData(TableWrapData.FILL);
 td.colspan = 2;
 formText.setLayoutData(td);
 String text = "Here is some plain text for the text to render.";
 formText.setText(text, false, false);
W二个参数设为false,意思是我们不需要解析html标记,W三个参数设为false,意思是我们不需扩展URLs.

自动URLs转化链接
现在我们会在文本中添加一个超链接,q把W?个参数设为true:
FormText formText = toolkit.createFormText(form.getBody(), true);
 td = new TableWrapData(TableWrapData.FILL);
 td.colspan = 2;
 formText .setLayoutData(td);
 String text = "Here is some plain text for the text to render; "+
   this text is at http://www.eclipse.org web site.";
 formText .setText(text, false, true);
如果看我们的视图,会是q样Q?/div>
 

?6QForm textlgURL自动转化链接

URL被{化ؓ了链?q个链接是包裹的文本中的一部分-我们不需要创建单独的链接组件然后试着把它夹在两个标签中间.
因ؓform textlg能够识别链?因此它接收我们前面用q的监听?当由toolkit创徏?form text会将toolkit的超链接l设|作为新链接的讄.

转自Qhttp://blog.csdn.net/starshus/archive/2006/02/07/593808.aspx

Leo 2006-02-10 15:42 发表评论
]]>Eclipse Forms: Rich UI for the Rich Client(译,W二部分)http://m.tkk7.com/leopallas/articles/30162.htmlLeoLeoFri, 10 Feb 2006 07:39:00 GMThttp://m.tkk7.com/leopallas/articles/30162.htmlhttp://m.tkk7.com/leopallas/comments/30162.htmlhttp://m.tkk7.com/leopallas/articles/30162.html#Feedback0http://m.tkk7.com/leopallas/comments/commentRss/30162.htmlhttp://m.tkk7.com/leopallas/services/trackbacks/30162.html增加一些内?/font>
现在我们已经有一个view能够成功q行?我们可以往里面增加一些内?Eclipse forms有一个body,我们可以q样创徏内容.

public void createPartControl(Composite parent) {
toolkit = new FormToolkit(parent.getDisplay());
form = toolkit.createForm(parent);
form.setText("Hello, Eclipse Forms");
GridLayout layout = new GridLayout();
form.getBody().setLayout(layout);
Hyperlink link = toolkit.createHyperlink(form.getBody(),
"Click here.", SWT.WRAP);
link.addHyperlinkListener(new HyperlinkAdapter() {
public void linkActivated(HyperlinkEvent e) {
System.out.println("Link activated!");
}
});
}

form的body是标题下面的可用I间.因ؓq个I间是一个SWT Composite,它能做ؓ其它lg的parent.在上面的代码?我们为body讄了layout, 然后创徏了一个超链接.链接是由Eclipse Forms提供的ؓC多的lg之一.我们可以链接增加监听?q样能够在用Ld时做出反?

升后的视图应该看v来象q样Q?/div>
 
?Q一个有链接的单form.

链接组(Hyperlink Groups)
Form tookit有一?链接组"对象.每个创徏出的链接都加入q个l对象中.链接ؓ多个角色?wbr>?它们定义了这个组中所有超链接在正常、hover、激zM同状态下的颜?它们Ҏ组中链接不同的状态来改变颜色.它们Ҏ组中链接不同的状态来改变下划UK?

当你要改变超链接l对象的默认讄?可以通过toolkit的getHyperlinkGroup()Ҏ来获得超链接l对?

创徏普通组?/font>

Eclipse Forms的一个设计目标就是让能够在编辑器/视图中创建普通SWTlg.因ؓform的body是一个普通composite,你能够在它里面用Q何layout和组?但是,C"原生?SWTlg有一个组件背?我们现在通过它们的构造方法创Z些组?
  layout.numColumns = 2;
GridData gd = new GridData();
gd.horizontalSpan = 2;
link.setLayoutData(gd);
Label label = new Label(form.getBody(), SWT.NULL);
label.setText("Text field label:");
Text text = new Text(form.getBody(), SWT.BORDER);
text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Button button = new Button(form.getBody(), SWT.CHECK);
button.setText("An example of a checkbox in a form");
gd = new GridData();
gd.horizontalSpan = 2;
button.setLayoutData(gd);

现在我们使用了两?q且创徏了一个标{?label),一个文本框(text field)和一个复选框(checkbox).l果如下Q?/div>
 

?Q一个拥有直接用它们的构造器创徏出的SWTlg的form
 
q张囄怎么回事Q我们创建的lg的背景直接和pȝH口背景相匹?wbr>,而不是和form的背景匹?另外,文本框看hq好是因张截图是在Windows XP下截?在其它操作系l上,它会看v来是有一?DҎ的空白条.Z解决q个问题,我们会用toolkit的工厂方法来创徏q些lgQ?br>
  Label label = toolkit.createLabel(form.getBody(), "Text field label:");
Text text = toolkit.createText(form.getBody(), "");
text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Button button = toolkit.createButton(form.getBody(), "A checkbox in a form", SWT.CHECK);
gd = new GridData();
gd.horizontalSpan = 2;
button.setLayoutData(gd);
q个视图现在会看来更好些了:
 

?Q一个拥有用form toolkit的工厂方法创建出的SWTlg的form

由form toolkit提供的工厂方法是Z方便.Toolkit没有函盖所有情?甚至是SWTlg集合,而且明显没有Z可能有的自己定制的组件提供这一便利.当你需要一个SWTlg与forml一?你应该用一个方?FormToolkit.adapt(Control control, boolean trackFocus, boolean trackKeyboard).所有的工厂Ҏ各自分别调用了这?wbr>适配Ҏ.

辑ֈ"qx"的视觉效?/font>

一个在PDE~辑器中Eclipse Forms的可看出的属性是lg?qx"视觉效果.以前所有没?DҎ的组件在H口中看h不错,但是在编辑器或视图中׃?q个支持写在FormToolkitcM.但是,在一些系l上它是通过一些定制达到的.举个例子,看一下这张从PDE~辑?2.1版本)中的截图Q?/p>

囄6QEclipse 2.1中Eclipse Forms的^滑视觉效?

象表?文本c?复选框{?是加上一个^滑的1个象素宽的边?q些Ҏ不是来自lg自己(SWT.BORDER风格没有用到).另外,如果讄一?tookit会ؓ每个lg的parent增加一个paint监听?在paint事g发生时ؓlg加上Ҏ.要想q样的话,你需要ؓ你创建的象文?表格,树等lg的每个composite调用paintBordersFor(parent).每个parent只需要调用一ơ方法就_了:不需要ؓ每个lgq样调用.

Form toolkit知道哪个lg需要一个定制的Ҏ.但是,你可能新创徏了一个不在原来名单中的组?它也需要一个边?你可以通过象下面这L代码ltoolkit一个提C:

Control myControl = new MyControl(parent);
myControl.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);
// or myControl.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TREE_BORDER);
toolkit.paintBordersFor(parent);

你可以在上面q张图中看出,象树和表DL"l构?wbr>(structural)"的组件有和文本区域不同的Ҏ风格q且你可以选择和你的组件相W合的那?注意用toolkit的工厂方法创建出的组件不需要这样做.

 因ؓEclipse 3.0和在Windows XP?当javaw.exe.manifest文g在Java虚拟机bin文g夹中?没有Ҏ产生出来.(q篇文章里我所有截N是在Windows XP下截?.q个文g--你可以在 SWT home page上下?-告诉toolkit为本地组件用XP皮肤.用XP皮肤,象文?表格和树是已l^滑的q且不需要再去调?Z让你的代码拥有可U?wbr>植?你可以L调用paintBordersFor(Composite)Ҏ,让toolkitL据不同操作系l?wbr>来决定该怎么?

定制布局(Custom layouts)
Eclipse Forms在SWT layout的基上增加了两个新的layout.q些layoutl承了SWT Layout基类q能够在MSWT composite上?但是一般都是和Eclipse Forms联合使用?

TableWrapLayout
现在我们知道如何来组合一个form,让我们先l一个悬?我们会改变那个超链接文本使它加长一些:
link.setText("This is an example of a form that is much longer "+
                     "and will need to wrap.");
让我们看看结果:
 

囄7Q一个用GridLayout的form

发生什么事了?C我们使用的是GridLayout.当它问这个超链接lg来计它大小?链接告诉它文字在单独行里需要的长度.虽然我们告诉lgd?wrap),它ƈ没有q样做因为GridLayout需要组件返回它的长?wbr>.连接组?-和其它象Label一LSWTlg,可以通过你传递它数值来军_长和?但是GridLayout不会向组件传递数值参?

我们需要的是一个象HTML表格一Llayout.我们希望内容去试N合提供的客户I间,q且一行行地叠?Eclipse Forms提供了一个这Llayout叫TableWrapLayout.GridLayout和TableWrapLayout之间有许多共同点.都是用表格来l织parent的children.都有layout data来告诉layout如何对待每个lg.都能够在需要占据所有空间时{接受组件的提示.

但是,它们在布局时完全不?TableWrapLayout从列开?wbr>.它计每列的最的,合适的,最大的宽度q用q个信息来占据空?它也试图可能地公^地在各列间分?q样有些lg没有多余的I间.

让我们用TableWrapLayout来重新更改例?wbr>(更改处高亮显C?Q?/div>
 
 public void createPartControl(Composite parent) {
toolkit = new FormToolkit(parent.getDisplay());
form = toolkit.createForm(parent);
form.setText("Hello, Eclipse Forms");
TableWrapLayout layout = new TableWrapLayout();
form.getBody().setLayout(layout);
Hyperlink link = toolkit.createHyperlink(form.getBody(),"Click here.", SWT.WRAP);
link.addHyperlinkListener(new HyperlinkAdapter() {
public void linkActivated(HyperlinkEvent e) {
System.out.println("Link activated!");
}
});
link.setText("This is an example of a form that is much longer and will need to wrap.");
layout.numColumns = 2;
TableWrapData td = new TableWrapData();
td.colspan = 2;
link.setLayoutData(td);

Label label = toolkit.createLabel(form.getBody(), "Text field label:");
Text text = toolkit.createText(form.getBody(), "");
td = new TableWrapData(TableWrapData.FILL_GRAB);
text.setLayoutData(td);

Button button = toolkit.createButton(form.getBody(), "A checkbox in a form", SWT.CHECK);
td = new TableWrapData();
td.colspan = 2;
button.setLayoutData(td);

}


我们用了GridData相同的概?一些变量拥有不同的名字(举个例子,colspan和rowspan,align和valign取自HTML TABLE的属?,但是你可以做相同的事--创徏一个超链接和按钮占据两列的格子.因ؓI白(margins)和GridLayout是相同的,l果会看h一?除了链接现在会包裹hQ?/pre>


囄8Q一个用TableWrapLayout的form

TableWrapLayout和GridLayout的一个主?wbr>的不同点是你应该停止去计垂直的I间.在GridLayout?你一般会?不易变Ş?rigid)"lg用自然的位置和大?wbr>q让"可׾~的(flexible)"lgd据水qx垂直的空?相反,TableWrapLayout是从上往下工作的,q且它容下所有的lg,它的工作是完全的.占据水^I间的概念还存在(象上面展CZ?.但是,垂直方向?你只能在单元(cell)比组仉旉择FILL单元,或选择TOP,MIDDLE或BOTTOM垂直寚w.
你也怼注意C个地方和刚刚说的不符QTableWrapLayout仍然有一个grabVertical变量.但是,q里q个变量在这里有明确的目的:当一个设|了高度的组件占多行?它的高度会给Z个条件就是垂直dimension已经知道?wbr>,lg需要去除它所在的多个单元之间的多余空?

Z用TableWrapLayout有好的结?wbr>,定lg可以接近风格(SWT.WRAP).Eclipse Froms提供的组合定制组件能够在box外面包裹.q是通过实现ILayoutExtension接口实现的:
public interface ILayoutExtension {
   /**
    * Computes the minimum width of the parent. All widgets capable of word
    * wrapping should return the width of the longest word that cannot be
    * broken any further.
    *
    * @param parent the parent composite
    * @param changed <code>true</code> if the cached information should be
    * flushed, <code>false</code> otherwise.
    * @return the minimum width of the parent composite
    */
   public int computeMinimumWidth(Composite parent, boolean changed);

   /**
    * Computes the maximum width of the parent. All widgets capable of word
    * wrapping should return the length of the entire text with wrapping
    * turned off.
    *
    * @param parent the parent composite
    * @param changed <code>true</code> if the cached information
    * should be flushed, <code>false</code> otherwise.
    * @return the maximum width of the parent composite
    */
   public int computeMaximumWidth(Composite parent, boolean changed);
}
TableWrapLayout本n实现了这个接?q样让它处理当composites的layout是这个composite的parent的children的情?wbr>.另外的两个方法能够计两U极端情?-当所有组件尽可能宽地布满时的昄的最宽度和最大宽?wbr>.两者的不同是列之间的多余I间可能小时A献出公^的空?

让我们看清楚贡献I间是怎样?我们会推荐我们到现在为止写的代码q象下面q样做出修改Q?/div>
 
 layout.numColumns = 3;
Label label;
TableWrapData td;

label = toolkit.createLabel(form.getBody(),
"Some text to put in the first column", SWT.WRAP);
label = toolkit.createLabel(form.getBody(),
"Some text to put in the second column and make it a bit "+
"longer so that we can see what happens with column "+
distribution. This text must be the longest so that it can "+
"get more space allocated to the columns it belongs to.",
SWT.WRAP);
td = new TableWrapData();
td.colspan = 2;
label.setLayoutData(td);
label = toolkit.createLabel(form.getBody(),
"This text will span two rows and should not grow the column.",
SWT.WRAP);
td = new TableWrapData();
td.rowspan = 2;
label.setLayoutData(td);
label = toolkit.createLabel(form.getBody(),
"This text goes into column 2 and consumes only one cell",
SWT.WRAP);
label.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
label = toolkit.createLabel(form.getBody(),
"This text goes into column 3 and consumes only one cell too",
SWT.WRAP);
label.setLayoutData(new TableWrapData(TableWrapData.FILL));
label = toolkit.createLabel(form.getBody(),
"This text goes into column 2 and consumes only one cell",
SWT.WRAP);
label.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB));
label = toolkit.createLabel(form.getBody(),
"This text goes into column 3 and consumes only one cell too",
SWT.WRAP);
label.setLayoutData(new TableWrapData(TableWrapData.FILL));
form.getBody().setBackground(form.getBody().getDisplay().
getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));

q个创徏了一些有不同长度文本的label.有些labels占据多列,有些占据多行.Z让测试更加简?
我们把form的背景设|ؓlg背景,q样单元能够更简单看出来.当我们运行例?我们会得C面的样子Q?/pre>

囄9QTableWrapLayout留下的多余空?/pre>

关键之处在于lg最宽度和最大宽度相比较?相差多,l果明?会看到列中有很大的缝?占据的宽度是lg所需要的最的宽度.注意W?列比W?列稍微宽一点点,q是因ؓW?列中的文字长度比W?列中文字要长?wbr>.如果需要阅d局的相关理?可以去这里W3C recommendations for HTML table auto-layout.

ColumnLayout
Eclipse Forms另外一个定制的layout是SWT RowLayout的变U?如果我们把RowLayout上的children垂直攄?-按列-q且使同列中的所有组件拥有相同的宽度,我们会由lg的宽度得到多个列.但是,最后一列显然不是被填满?-q由lg的个数决?wbr>.如果在form?我们会仍然看到所有组件在一列中,因ؓRowLayout不能?wbr>"垂直" 包裹.如果我们用GridLayout相替代的?列的数量由我们自己决?

在更加复杂的forms中我们需要列的数量按情况变化.换句话来?我们希望数字按照form的宽度来改变--有可能需要更多的?当宽度减时则把数字减小.而且我们希望所有列的长度象报纸布局一L?q些要求都能够通过ColumnLayout来达?

与TableWrapLayout相比,ColumnLayout更加?不需要复杂的讄.唯一需要你讄的就是列数的范围,默认??.下面的例子演CZ一个用ColumnLayout的有许多D落(sections)的form.初始?只需要两列就可以攄所有段落了.如果我们把编辑器变窄一?layout会它们在同一列中.

 
囄10Q用ColumnLayout的所有按列排列的D落
.layout开始是两列,但是按照I间的改变变成了一?

转自Qhttp://blog.csdn.net/starshus/archive/2006/02/07/593785.aspx


Leo 2006-02-10 15:39 发表评论
]]>Eclipse Forms: Rich UI for the Rich Client(译,W一部分)http://m.tkk7.com/leopallas/articles/30161.htmlLeoLeoFri, 10 Feb 2006 07:36:00 GMThttp://m.tkk7.com/leopallas/articles/30161.htmlhttp://m.tkk7.com/leopallas/comments/30161.htmlhttp://m.tkk7.com/leopallas/articles/30161.html#Feedback0http://m.tkk7.com/leopallas/comments/commentRss/30161.htmlhttp://m.tkk7.com/leopallas/services/trackbacks/30161.html Eclipse Forms: 客户端做的漂亮UI(译,W一部分)

q篇文章是我为eclipse中国C֌译?今天才翻译了前面一点点.版权归原作?原文作者应该不会生气吧:P
原文?http://www.eclipse.org/articles/Article-Forms/article.html

Summary
q篇文章告诉你如何在你的胖客户端程序中加入Eclipse Forms.Eclipse Forms可以在你的程序里不通过嵌入览器而达到Web效果.q样可以不仅对组件保持完全控制而且不失eclipse所有的可移植?q篇文章从 Eclipse Forms的基本特性到高Ҏ一步一步指g.

By Dejan Glozic, IBM Canada Ltd.

January 16, 2005

历史
一个Eclipseq_的基本特性是:所有基于Eclipseq_开发的E序界面能够象本地程序一 ?因ؓSWT,菜单,H口,?表格,按钮和其它组件在M操作pȝ上都和系l风g持一?作ؓEclipse组最早的一个成?我记得开? eclipse原型代码快乐的日?菜单是真?工具栏是真的,复选菜?文本?按钮,复选框,单选按钮都是真?它们不是d来的,都是调用的操作系 l的本地lg.

很长一D|间里,如果你写qEclipse插g,它们基本上是属于下面的范?
1.Editors (~辑?
2.Views (视图)
3.Wizards (向导)
4.Dialog (H口)
q个范围都有明确的规则规定了如何~写插g.我们已经看过了views里的?表格,editors里的文,q有单的象在向导和窗口里的按钮和文本?

Eclipse 3.x里的RCP在系l上扩展了一pd新的Ҏ?它带来了许多问题有效的解x?你现在可以在eclipse上构建和IDE完全不同的RCPE序

.虽然一般的工作台部分比如视囑֒~辑器工作的很好,但是构成q些部分的组??表格,文本~辑器等)在RCP里有时候可能不是最好的解决办法.从Eclipse 3.0?Eclipse Forms被设计ؓ来提供替代的解决Ҏ.

h讽刺意味的是,我们开发出的Eclipse Forms解决了一个比RCP早很长时间就存在于Eclipse SDK中的一个问?使用专门~辑plugin.xml的带语法分析,颜色昄的文本编辑器的PDE开发者ƈ不高?Eclipse的Java~辑器ƈ? 有什么问?它非常强?对于q个d也很理想.但是,它是用来~辑Java代码?在插件manifests?xml是用来在更高层次上抽象描q数? l构?手工~辑xml,即是用带语法分析,颜色昄的编辑器, 大部分用户也觉得不太合?在插件manifests?语法不是重点.具体的数据和它的意思才是重?

一个很好的不同例子是用HTML识别工具来查看标?在代码的角度,我们可以清楚地看见含有相兛_性的元素.虽然我们看到语法,但是很难看清楚它? 底要表现什?一个WYSIWYG视图可以昄表格,颜色,q有一些含有表?囄{的文本内容.在这个角度用html文g更加h生效率,

因ؓ语法和标记被隐藏在后C.

弄明白对于html文的WYSIWYG概念很简?因ؓHTML标签是用来展CZؓ览器写一个来表现属?链接和囄的文本文档结构的, WYSIWYG在这斚w意味着在它最l的形式上编辑文?-q可能和它在览器上的Ş式相?指出用不同的Ҏ的一个编辑插件manifest~辑器的? 观很?最l工作小l做Z以下军_:
1.用最合适它的方法来展示manifest的每个部?举个例子,象插件名U?提供者等重要信息可以单的通过一个文本框来编?象扩展点定义q样带有阶层的数据结构则通过树来展现 .
2.通过各个单独的编辑页面来展示manifest的各个部?序则按照它本来在代码中的顺?
3.~辑器的每个面应该保持文的风?q能够容U不同的lg,链接,囄,文本,q在对于面寸内容太多时提供一个滚动条.

囄1QEclipse SDK1.0中的插gmanifest~辑?它容U了SWTlg,链接和囄,q且当尺怸够时能够滚动(pweb览器一?.注意Z看v来和文本内容更加融合,所有组仉是^滑的(flat).

W三Ҏ效地促了它作ؓ现在以Eclipse Forms为名U的插g产生.?.0发布?其它的开发者希望能够复制PDE多页面编辑器的胖客户端接?

它最l作为Eclipse3.0中带有公共API的插件发布了.

在下面的文章?我们告诉你什么是Eclipse Forms(和什么不是Eclipse Forms),q如何用单的使用它们来创造漂亮的界面.

Eclipse Forms Mission

Eclipse Forms是一?img alt="" src="http://www.eclipse.org/articles/Article-Forms/images/tag_1.gif" align="bottom" height="13" width="24">贯穿所有Eclipse UI?img alt="" src="http://www.eclipse.org/articles/Article-Forms/images/tag_2.gif" align="bottom" height="13" width="24">ZSWT和JFace的来提供可移植Web风格用户界面?img alt="" src="http://www.eclipse.org/articles/Article-Forms/images/tag_4.gif" align="bottom" height="13" width="24">可选胖客户端插?
Eclipse Forms打破了只能用于特定Eclipse UI(~辑?视图,向导,H口)的模?Z满开发者的需?一个Eclipse form能够以Q何UI的Ş式出?UI开发者能够用ؓ他们的Q务选择最合适的概念.
Eclipse不是用来设计完全替代SWT或JFace?q个插g只有一些精心挑选的专有定制lg ,布局和支持类,以便使用SWT和JFace时达到预期效?
? 明显?一个Eclipse Form通常看v来象|页一?事实是form的纲领可行性的各方面都是forms强大的和h吸引?要同q浏览器辑ֈq样的弹性需要DOM支持,q? 且经常几乎是聚耦的.Eclipse Forms是可UL?q且是在SWT和JFace之上写的.
Eclipse Forms已经?.0 release中重写来只依赖于q_UI插g,而不再依赖于PDE UI插g.虽然它们q不是RCP的最化部分,但是你能够在MRCPE序中添加Eclipse Forms.

要点2 不能被低?当构建Eclipse Forms?你是在用SWT.没有Eclipse Forms按钮,也没有Eclipse Forms treelg{等.你只是用Eclipse Forms来让现有的组件达到客户体?

Eclipse Forms是通过下列元素来达到目的的:
"form"概念和视?~辑器等是一个层ơ的概念.
一个工具包(toolkit)来管理颜?链接组q有其它斚w.q且充当许多SWTlg的工厂类.
一个新的layout manager来管理布局,和HTML表格怼.
一l定制的lg用来配合form.(链?囄链?滚动l合<scrollable composite>,D?lt;section>)
一个各个页面都是forms的多面~辑?e.g. PDE manifest~辑?

  虽然Eclipse Forms的设计中没有ML您在一个窗口中建立form.但是大部分时候都是在视图和编辑器中用forms,而不是窗口或向导.的确,在一个普通的 H口或向g加入form看上LҎ?毕竟其他部分都是普通的SWTlg.无论如何,在未?q是一个探索的方向.

Baby steps
在您的用h口中使用Eclipse Forms非常?在开始前你在插g依赖部分加入org.eclipse.ui.forms插g.我们会创Z个拥有form?/p>

Eclipse view,然后往里面填充内容.注意q篇文章插g的所有代码都以zip文g格式提供下蝲.

Hello, Eclipse Forms
我们从往view里添加一个空白form来开始游?

public class FormView extends ViewPart {
 private FormToolkit toolkit;
 private ScrolledForm form;

 /**
  * The constructor.
  */
 public FormView() {
 }

 /**
  * This is a callback that will allow us to create the viewer and
  * initialize it.
  */
 public void createPartControl(Composite parent) {
  toolkit = new FormToolkit(parent.getDisplay());
  form = toolkit.createScrolledForm(parent);
  form.setText("Hello, Eclipse Forms");
 }

 /**
  * Passing the focus request to the form.
  */
 public void setFocus() {
  form.setFocus();
 }

 /**
  * Disposes the toolkit
  */
 public void dispose() {
  toolkit.dispose();
  super.dispose();
 }
}

p你在q段代码中看C?不需要太多就可以创徏一个form.我们开始是创徏一个toolkit实例().我们通过toolkit以提供的composite为parent?img alt="" src="http://www.eclipse.org/articles/Article-Forms/images/tag_2.gif" align="bottom" height="13" width="24">创徏一个可以滚动的form.我们讄?img alt="" src="http://www.eclipse.org/articles/Article-Forms/images/tag_3.gif" align="bottom" height="13" width="24">form的标?而且我们定在需要的时候把focus传给form,当view dispose时把toolkit也dispose?

q个视图应该看v来象q样:

囄2:
在view里的一个空的form,使view变窄一点会让form标题包裹h,一旦没有空间来容纳整个form,滚动条就会显C?
? 意我们用C可滚动的form,因ؓ我们把它攑ֈ了一个可以改变大的视图?在更复杂的环境里,比如一个form需要作Z个布局的一部分,没有滚动? 力的form也可以用.在这U情况下,我们会调用FormToolkit.createForm(),让外层的parent来解决需要滚动条的问?

转自Qhttp://blog.csdn.net/starshus/archive/2006/01/23/586576.aspx

Leo 2006-02-10 15:36 发表评论
]]> վ֩ģ壺 ѻվ߹ۿ| һ߹ۿ| 91鶹ƷԲ߹ۿ| ޹aƵ| ѹۿվ| պAvĻþþ޸| 㽶Ƶһ| ձһ| ɫaƬѿ| ˴ս˾Ʒһ| yellowƵѿ| þþƷav| 51ƵѹۿƵ| Ʒ˿Ļ| պѹۿһëƬ | ޹һ| 69Ƶ߹ۿ| ¶ɫ| Ʒһ | ҹƷѹۿ| һͼƬ| ˳Ƶ| ޶aվ߹ۿ| ޾Ʒ| һ߹ۿ| gayƬgvվ| avַ| ˾þƵ| 츾AVһլ| ٸѾƷ| ԭ1769þѲ| ۺɫ7777վ777| ޵һƷպ߲| þѹƷһ| www.޳| ޾Ʒþþþþò| 99Ѳ| ɫ͵͵| ҹAVպAVȫ| վ߹ۿ| ý̫ˬƵѹ|