`
yianpuodiaotu
  • 浏览: 237670 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

通过事件驱动,创建不同的部件

阅读更多

非常easy的东西,就是先dispose再create。

 

写出来的主要是看看大家有没有更好的实现方法

 

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
 * 该程序目的:通过事件驱动,简单演示动态创建组件。
 * 选择“是”的时候:供选择的是下拉框
 * 选择“否”的时候:是进行具体的文本配置
 * @author Administrator
 */
public class MyComposite {

	private  Button useOutSourceButton;
	private  Button newSourceButton;
	private  Composite dbSourceComposite;
	private  Shell shell;

	/**
	 * 主程序
	 * @param args
	 */
	public static void main(String[] args) {
		MyComposite myComposite = new MyComposite();

		myComposite.open();
	}

	/**
	 * shell
	 */
	private void open() {
		Display display = Display.getDefault();
		shell = new Shell(display);
		shell.setText("组件替换测试");
		shell.setSize(400, 200);
		shell.setLayout(new GridLayout(3, false));

		final Label label = new Label(shell, SWT.NONE);
		label.setLayoutData(new GridData(100, SWT.DEFAULT));
		label.setText("使用数据库资源");

		useOutSourceButton = new Button(shell, SWT.RADIO);
		useOutSourceButton.setText("是");
		newSourceButton = new Button(shell, SWT.RADIO);
		newSourceButton.setText("否");

		dbSourceComposite = new Composite(shell, SWT.NONE);
		dbSourceComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER,true, false,3,1));
		dbSourceComposite.setLayout(new GridLayout(3,false));

		createInnerListeners();

		shell.open();
		while (!display.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
		display.dispose();

	}

	/**
	 * 事件监听器
	 */
	protected void createInnerListeners() {
		useOutSourceButton.addSelectionListener(new SelectionListener() {
			public void widgetSelected(SelectionEvent e) {
				Button btn = (Button) e.getSource();
				if (btn.getSelection()) {
					initSelectDBSourceUI(dbSourceComposite);
				}
			}

			public void widgetDefaultSelected(SelectionEvent e) {
			}
		});
		newSourceButton.addSelectionListener(new SelectionListener() {
			public void widgetSelected(SelectionEvent e) {
				Button btn = (Button) e.getSource();
				if (btn.getSelection()) {
					initConfigDBSourceUI(dbSourceComposite);
				}
			}

			public void widgetDefaultSelected(SelectionEvent e) {
			}
		});
	}

	/**
	 * 创建部件组1
	 * @param composite
	 */
	private void initConfigDBSourceUI(final Composite composite) {
		this.disposedComposite(composite);
		Text configureText = new Text(composite, SWT.BORDER);
		configureText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
				false));
		configureText.setEditable(false);
		Button configureButton = new Button(composite, SWT.NONE);
		configureButton.setText("配置");
		Button resetButton = new Button(composite, SWT.NONE);
		resetButton.setText("重置");
		shell.layout(true, true);
	}

	/**
	 * 创建部件组2
	 * @param composite
	 */
	private void initSelectDBSourceUI(final Composite composite) {
		this.disposedComposite(composite);
		Label dbTypeLabel = new Label(composite, SWT.NONE);
		dbTypeLabel.setText("数据库资源名称");
		dbTypeLabel.setLayoutData(new GridData(100, SWT.DEFAULT));
		dbTypeLabel.setToolTipText("选择已有数据库资源");

		CCombo dbCombo = new CCombo(composite, SWT.BORDER);
		dbCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
		dbCombo.setEditable(false);

		Button resetButton = new Button(composite, SWT.NONE);
		resetButton.setText("重置");
		shell.layout(true, true);
	}
	
	/**
	 * 销毁原有部件
	 * @param composite
	 */
	private void disposedComposite(Composite composite) {
		Control[] arrays = composite.getChildren();
		for (Control control : arrays) {
			if (control != null)
				control.dispose();
		}
	}
}

 

 效果图:



 

 

  • 大小: 15.2 KB
  • 大小: 14.9 KB
分享到:
评论

相关推荐

    win2000驱动程序设计指南

    常见的驱动程序设计问题 <br>第1部分 图形驱动程序 第2部分 显示器及视频微端口驱动程序 第3部分 打印机驱动程序及假脱机打印部件 <br>第五卷 网络驱动程序设计指南 1 第一部分 网络驱动程序 2 第...

    S120驱动器-调试手册

    ● 输入所用功率部件、电机和编码器进行驱动配置。 ● 确定指令源、设定值源和控制方式来设置驱动参数。 ● 以驱动专用功能(如自由功能块和工艺控制器)来扩展参数设置。 ● 转至驱动在线并通过驱动控制面板测试...

    wxpython in action中英文合集(两份)

    创建一个应用程序实例并进入它的主事件循环 23 1.3 扩展这个最小的空的wxPython程序 24 1.4 创建最终的hello.py程序 26 2、给你的wxPython程序一个稳固的基础 28 2.1 关于所要求的对象我们需要知道些什么? 28 2.2 ...

    微控制器的简单 GUI_C语言_代码_相关文件_下载

    支持基于窗口的小部件和简单的 API 以按需创建自定义小部件 支持多点触控 支持触摸事件(单击、双击、移动等)和手势(放大、缩小等) 支持键盘输入 支持 UTF-8 API 支持多语言 使用模型视图架构支持完整的事件驱动...

    flutter_preview:颤振因为小部件驱动的开发需要小部件驱动的预览

    创建小部件样本并实时预览 该项目是实验性的,但可以安全使用,因为在编译过程中不会添加任何代码。在Flutter Web或台式机也达到稳定版本之前,它将是不稳定的。 入门 安装 安装vscode Flutter Preview扩展。 将...

    script-widget:在Flutter应用中添加动态创建的,脚本驱动的小部件。 完全用脚本语言编写UI和逻辑

    script_widget 一个新的Flutter软件包项目。入门该项目是Dart的起点,Dart是一个库模块,其中包含可以在多个Flutter或Dart项目之间轻松共享的代码。 要获得Flutter入门方面的帮助,请查看我们的,其中提供了教程,...

    Inventor基础培训教程.doc

    尝试以不同的方法创建相同的零件。 4. 改变零件的材料、颜色等。 5. 特征镜像。 6. 设计元素的创建和引用。 7. 创建工程师记事本。 达到要求: 1. 完成零件几何造型。 2. 按给定尺寸和约束完成减重槽的草图。 3. ...

    使用ESP32摄像头板创建自组织LED-C/C++开发

    使用ESP32相机板创建自组织LED自组织LED该项目使用esp32板来驱动一串WS2118 LED。 它使用一些基本的图像处理来检测LED的位置,以便即使LED没有排列在网格中也可以显示几何图案。 如果您拥有espcam,则可以按照“设置...

    ioa虚拟工厂免安装版

    用户可以启用任何一个预先构建的场景或者在一个空旷的场景中通过拖拽的方式选择部件库中所包括的传感器、传送带、按钮、开关等部件创建一个新的工业系统,同时具有数字量和模拟量不同I/O点配置。 大部分的部件都...

    通用传感器库_C++_代码_相关文件_下载

    嵌入式系统设计面临的众多挑战之一是您今天使用的部件明天可能会停产,或者系统要求可能会发生变化,您可能需要选择不同的传感器。 创建新的驱动程序是一项相对容易的任务,但将它们集成到现有系统中既容易出错又...

    Jqury基础教程

    3.5 通过事件对象改变事件的旅程 3.5.1 事件目标 3.5.2 停止事件传播 3.5.3 默认操作 3.5.4 事件委托 3.6 移除事件处理程序 3.6.1 事件的命名空间 3.6.2 重新绑定事件 3.7 模仿用户操作 3.8 小结 第4章 ...

    PDM产品配置管理的研究

    通过使用一系列的产品特性规则定义,连接了市场的特征/选项列表与工程BOM表,这样可以驱动产品的开发过程,能够加速客户定单的过程,加强企业与客户间的关系。 二、产品需求配置管理模型的研究 2.1 产品需求配置管理...

    009b-tkinter-input-and-output-iktaecheon:009b-tkinter-input-and-output-iktaecheon由GitHub Classroom创建

    今天,我们将着眼于创建我们的第一个事件驱动程序,该程序将命令选项用于按钮小部件。 这使我们能够在单击按钮时使程序执行特定的代码。 我们今天将要执行的一些代码涉及从Entry小部件检索数据并对其进行处理。 这...

    刮板输送机结构参数化建模研究

    刮板输送机关键部件的参数化建模主要包括三维模型创建、设计参数确定、关系设定等3个步骤,以驱动链轮参数化建模为例介绍了关键部件参数化建模过程。刮板输送机复杂装配体的参数化建模基于Pro/Toolkit二次开发技术和...

    C#使用ADO.Net部件来访问Access数据库的方法

    数据库的访问是所有编程语言中最重要的部分,C#提供了ADO.Net部件用于对数据库进行访问。我们将从最简单易用的微软Access数据库入手讨论在C#中对数据库的访问。 C#中的Connection对象和Command对象与Access类似,但...

    DesignerWt:Wt的布局和窗口小部件编辑器(C ++ Web应用程序)-开源

    创建此类时,该类将产生一个窗口小部件对象,该对象可以附加到浏览器窗口或任何其他Wt容器窗口小部件。从V2.0.0开始,已添加了数据库感知窗口小部件的主要功能,数据连接编辑和查询编辑。 这包括大多数主要数据库的...

    eplan破解教程,无模板,无数据库无定义解决方法

    EPLAN P8.2.7破解教程 ...如果没有“功能定义”文件夹,就自己创建一个然后把文件复制进去。 复制完之后打开eplan软件 打开选项>设置 选择功能定义,把刚刚新建的文件《功能定义》的路径选择进去。 到此为止。。

    草图设计:创建草图.doc

    项目二 草图设计 任务1 创建草图 教学目的 1、熟悉UG NX7.0的常用工具; 2、并掌握一些基本操作。...通过扫掠、拉伸或旋转草图到实体或片体以创建部件特征; 创建有成百上千个草图曲线的大型 2D 概

    Visual_Basic_6.0_中文版程序员指南

    全书分两部分共十七章,还有四个附录,其主要内容包括 窗体、控件和菜单,工程管理,编程基础,创建用户界面,使用 VisualBasic 的标准控件,用对象和ActiveX部件编程,响应鼠标和键盘事件,使用文本和图形,调试代码和处理...

Global site tag (gtag.js) - Google Analytics