【插件开发】—— 5 SWT控件以及布局使用

前文回顾:

插件学习篇

简单的建立插件工程以及模型文件分析

利用扩展点,开发透视图

4 SWT编程须知

  经过前几篇的介绍,多少对SWT又有了一些认识,那么这篇继续来看一下一些控件的组合使用。

  首先是几种简单的控件,Label,Text,Button,Combo这些都是些常用的简单框架,但是为了能够构造出整齐的布局,还是要多花些心思的。

  除了这些简单的控件外,还有点复杂的控件,比如Table和树、选项卡和菜单等等,这里就先不做介绍了。

  为了整个这些控件,经常要使用两个组合控件以及多种布局。

  1 【Group 组】,这个组可以为我们生成一个带有线的框,这样可以把杂乱的控件放到一个规整的容器内。

  2 【Composite 组合控件】,它是为了拼接一些简单的控件,形成具有复杂功能的整合控件。

  比如文件路径的浏览,往往就需要一个文件浏览的按钮,和一个文本框。

  这里先放出一段代码,代码中使用到了简单的布局模型GridLayout(),以及组和组合控件,还有一些简单的控件。形成一个登陆界面,并且单击按钮可以出发响应事件。效果图如下:

  登录前:

  登陆后:

  实现代码如下:

  1 package com.xingoo.plugin.swttest.test;
  2
  3 import org.eclipse.swt.SWT;
  4 import org.eclipse.swt.events.SelectionAdapter;
  5 import org.eclipse.swt.events.SelectionEvent;
  6 import org.eclipse.swt.layout.FillLayout;
  7 import org.eclipse.swt.layout.GridData;
  8 import org.eclipse.swt.layout.GridLayout;
  9 import org.eclipse.swt.widgets.Button;
 10 import org.eclipse.swt.widgets.Combo;
 11 import org.eclipse.swt.widgets.Composite;
 12 import org.eclipse.swt.widgets.Group;
 13 import org.eclipse.swt.widgets.Label;
 14 import org.eclipse.swt.widgets.MessageBox;
 15 import org.eclipse.swt.widgets.Shell;
 16 import org.eclipse.swt.widgets.Text;
 17
 18 import com.xingoo.plugin.swttest.Abstract.AbstractExample;
 19
 20 public class Test extends AbstractExample{
 21     private Label infoLabel;
 22     private Text usernameText;
 23     private Text passwordText;
 24     private Combo roleCombo;
 25
 26     public static void main(String[] args) {
 27         new Test().run();
 28     }
 29     public void todo(Shell shell) {
 30         Group testGroup = new Group(shell,SWT.NONE);
 31         testGroup.setText("User Login");
 32         GridLayout layout = new GridLayout();
 33         layout.numColumns = 2;
 34         layout.marginWidth = 30;
 35         layout.marginHeight = 10;
 36         testGroup.setLayout(layout);
 37         testGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 38         {
 39             Composite composite = new Composite(testGroup,SWT.NONE);
 40             GridLayout layoutComposite = new GridLayout();
 41             layoutComposite.numColumns = 2;
 42             layoutComposite.marginHeight = 1;
 43             composite.setLayout(layoutComposite);
 44             composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,2,2));
 45
 46             infoLabel = new Label(composite,SWT.NONE);
 47             infoLabel.setText("请输入用户名 密码");
 48             infoLabel.setLayoutData(new GridData(GridData.FILL_BOTH));
 49             infoLabel.setAlignment(SWT.RIGHT);
 50         }
 51         {
 52             Label usernameLabel = new Label(testGroup,SWT.NONE);
 53             usernameLabel.setText("username:");
 54
 55             usernameText = new Text(testGroup,SWT.BORDER);
 56             usernameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 57         }
 58         {
 59             Label passwordLabel = new Label(testGroup,SWT.NONE);
 60             passwordLabel.setText("password:");
 61
 62             passwordText = new Text(testGroup,SWT.BORDER | SWT.PASSWORD);
 63             passwordText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 64         }
 65         {
 66             Label roleLabel = new Label(testGroup,SWT.NONE);
 67             roleLabel.setText("role:");
 68
 69             roleCombo = new Combo(testGroup,SWT.DROP_DOWN);
 70             roleCombo.setItems(new String[]{"Admin","custom"});
 71             roleCombo.select(1);
 72         }
 73         {
 74             new Label(testGroup,SWT.NONE);
 75
 76             Button rememberPWBtn = new Button(testGroup,SWT.CHECK);
 77             rememberPWBtn.setText("记住密码");
 78         }
 79         {
 80             new Label(testGroup,SWT.NONE);
 81
 82             Button autoLoginBtn = new Button(testGroup,SWT.CHECK);
 83             autoLoginBtn.setText("自动登录");
 84         }
 85         {
 86             new Label(testGroup,SWT.NONE);
 87
 88             Button loginBtn = new Button(testGroup,SWT.PUSH);
 89             loginBtn.setText("登录");
 90
 91             loginBtn.addSelectionListener(new SelectionAdapter() {
 92                 public void widgetSelected(SelectionEvent evt){
 93                     infoLabel.setText("登陆成功");
 94
 95                     usernameText.setText("");
 96                     usernameText.setEnabled(false);
 97
 98                     passwordText.setText("");
 99                     passwordText.setEnabled(false);
100
101                     roleCombo.setEnabled(false);
102                 }
103             });
104         }
105     }
106 }

  注意其中的一些技巧:

  30-36行:我们创建了一个组控件,并且使用了网格布局,设置每行有两列。并且设置了组内填充边界,marginWidth以及marginHeight。

  39-49行:我们创建了一个组合对象,使他占有了两个列元素。并且设置组内为两列的网格布局。

  

  关于事件的监听,之后也会搜集整理出一些常用的事件。

  剩下的就比较好理解了,当没有空间元素填补的时候,为了防止布局错乱,创建了一个空的Label对象用来占位。

  new Label(testGroup,SWT.NONE);

  

  这里面使用到了一个前文提到的抽象类,这里再贴出来一次。

 1 package com.xingoo.plugin.swttest.Abstract;
 2
 3 import org.eclipse.swt.layout.FillLayout;
 4 import org.eclipse.swt.widgets.Display;
 5 import org.eclipse.swt.widgets.Shell;
 6
 7 public abstract class AbstractExample{
 8     public void run(){
 9         Display display = new Display();
10         Shell shell = new Shell(display);
11         shell.setText("shell example");
12         shell.setBounds(200,200,400,280);
13         shell.setLayout(new FillLayout());
14         todo(shell);
15         shell.open();
16
17         while(!shell.isDisposed()){
18             if(!display.readAndDispatch())
19                 display.sleep();
20         }
21         //dispose the resource
22         display.beep();
23         display.dispose();
24     }
25     public abstract void todo(Shell shell);//extension something here
26 }

  后续将会更新,复杂控件以及布局模型的介绍。

时间: 2024-10-04 21:06:12

【插件开发】—— 5 SWT控件以及布局使用的相关文章

WPF 控件与布局

[控件到底是什么?] 程序的本质就是"数据+算法"------用户输入原始的数据,算法处理原始数据并得到结果数据.问题就在于程序如何将结果数据显示给用户.同样一组数据,你可以使用LED阵列显示出来,或者以命令行模式借助各种格式控制符(如TAB)对齐并输出,但这些都不如图形界面(GUI  Graphic User Interface)来的友好和方便.GUI的方便在于它对数据展示的直观性,程序员可以通过编程的方式将数据通过图形的方式展示出来,从而避免了用户面对一大堆复杂数据的痛苦.提高了工

Excel开发学习笔记:界面交互与控件的布局

除了业务逻辑之外,比较耗时耗力的就是人机交互了.在编写excel定制程序的过程中,这次用到了以下几种交互方式: 通过excel工作表(worksheet)获取用户输入 通过按钮控件触发功能代码执行 通过TreeView控件显示内容摘要及导航 通过自定义的windows窗体提供交互 工作表的操作放到后面再说,讲一下按钮控件button和Treeview控件的布局. 放置控件的方法: 无非可视化放置和运行时代码加载两种.可视化放置比较直观,通过visual studio的toolbox工具栏拖动需要

Android 通过代码改变控件的布局方式

在很多情况下当我们在xml中布局的方式并不能满足我们的要求,而这时我们就需要通过在代码中控制控件的布局根据不同的条件来控制布局.首先来了解一下安卓中的一些单位 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素.px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多.需要注意的是:当我们在XML布局

Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件

最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下:   1.UI控件与布局     2.MVVM     3.数据绑定     4.await/async     5.Linq查询     6.WCF RIA Services     7.序列化     8.委托与事件 1.UI控件与布局 常用的主要是Grid.StackPanel.Border,其中最常用的的是Grid,是一

背水一战 Windows 10 (38) - 控件(布局类): Panel, Canvas, RelativePanel, StackPanel, Grid

原文:背水一战 Windows 10 (38) - 控件(布局类): Panel, Canvas, RelativePanel, StackPanel, Grid [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(布局类) Panel Canvas RelativePanel StackPanel Grid 示例1.Panel(基类) 的示例Controls/LayoutControl/PanelDemo.xaml <Page x:Class="Window

背水一战 Windows 10 (39) - 控件(布局类): VariableSizedWrapGrid, Border, Viewbox, SplitView

原文:背水一战 Windows 10 (39) - 控件(布局类): VariableSizedWrapGrid, Border, Viewbox, SplitView [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(布局类) VariableSizedWrapGrid Border Viewbox SplitView 示例1.VariableSizedWrapGrid 的示例Controls/LayoutControl/VariableSizedWrapGri

WPF的ListView控件自定义布局用法实例

本文实例讲述了WPF的ListView控件自定义布局用法.分享给大家供大家参考,具体如下: 概要: 以源码的形式贴出,免得忘记后,再到网上查资料.在VS2008+SP1环境下调试通过 引用的GrayscaleEffect模块,可根据参考资料<Grayscale Effect...>中的位置下载. 正文: 如何布局是在App.xaml中定义源码如下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

Android 手机卫士--自定义组合控件构件布局结构

由于设置中心条目中的布局都很类似,所以可以考虑使用自定义组合控件来简化实现 本文地址:http://www.cnblogs.com/wuyudong/p/5909043.html,转载请注明源地址. 自定义组合控件 1.将已经编写好的布局文件,抽取到一个类中去做管理,下次还需要使用此布局结构的时候,直接使用组合控件对应的对象. 2.将组合控件的布局,抽取到单独的一个xml中 新建布局文件:setting_item_view.xml,将上篇文章中布局文件中的代码放进去 <?xml version=

《深入浅出WPF》学习总结之控件与布局

一.控件到底是什么 控件的本质是“数据+算法”——用户输入原始数据,算法处理原始数据并得到结果数据.问题就在于程序如何将结果数据展示给用户.同样一组数据,你可以使用LED阵列显示出来,或者是以命令行模式借助各种控制字符(如Tab)对其并输出,但这些都不如图形化用户界面(Graphics User Interface ,GUI)来的友好和方便.GUI是程序界的优胜者,但在Windows上实现图形化界面有很多中方法.每种方法又拥有自己的一套开发理念和工具.每种GUI开发与它的里理念和工具共同组成一种