`
salever
  • 浏览: 255654 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Draw2D 模拟SWT控件之TextField、TextArea

阅读更多

TextField、TextArea也是SWT里常用的控件,接下来我们来模拟它们。

 

效果图:

上面是TextField,下面是TextArea。

 

TextField就比较简单了,给Label设一个边框,修改一下背景色,然后绘制一下文字就行了。

 

TextFieldFigure.java

public class TextFieldFigure extends Label {
	
	public TextFieldFigure() {
		this("");
	}

	public TextFieldFigure(String text) {
		super(text);
		setMinimumSize(new Dimension(FigureConstants.COMBOBOX_DEFAULT_WIDTH,
				FigureConstants.COMBOBOX_FIXED_HEIGHT));
		LineBorder lineBorder = new LineBorder();
		lineBorder.setColor(ResourceConstants.BORDER_COLOR);
		setBorder(lineBorder);
	}
	
	/* (non-Javadoc)
	 * @see org.eclipse.draw2d.Figure#setBounds(org.eclipse.draw2d.geometry.Rectangle)
	 */
	@Override
	public void setBounds(Rectangle rect) {
		rect.height = FigureConstants.COMBOBOX_FIXED_HEIGHT;
		super.setBounds(rect);
	}
	
	/* (non-Javadoc)
	 * @see org.eclipse.draw2d.Label#paintFigure(org.eclipse.draw2d.Graphics)
	 */
	@Override
	protected void paintFigure(Graphics graphics) {
		super.paintFigure(graphics);
		Rectangle bound = getBounds();
		graphics.setBackgroundColor(ColorConstants.white);
		graphics.fillRectangle(bound.x,bound.y, bound.width, bound.height);
		graphics.drawText(getText(), bound.x + 2, bound.y + 4);
	}
	
	/* (non-Javadoc)
	 * @see org.eclipse.draw2d.Label#setText(java.lang.String)
	 */
	@Override
	public void setText(String s) {
		super.setText(s);
		repaint();
	}
}

 不解释了。

 

TextAreaFigure就比较麻烦了,主要是右边的滚动条,还需要根据大小来调整,不过自Draw2D,绘制功能尤其强大,有draw就足够实现它了。

右边分为三部分,上下是箭头按钮,图片模拟,中间为滚动区域,填充颜色就行。

TextAreaFigure.java:

public class TextAreaFigure extends Label{

	private static final Image UP = createImage("icons/textarea_1.gif");

	private static final Image DOWN = createImage("icons/textarea_2.gif");

	private static Image createImage(String name) {
		InputStream stream = TextAreaFigure.class.getResourceAsStream(name);
		Image image = new Image(null, stream);
		try {
			stream.close();
		} catch (IOException ioe) {
		}
		return image;
	}
	
	/**
	 * 
	 */
	public TextAreaFigure() {
		LineBorder lineBorder = new LineBorder();
		lineBorder.setColor(ResourceConstants.BORDER_COLOR);
		setBorder(lineBorder);
	}
	
	/* (non-Javadoc)
	 * @see org.eclipse.draw2d.Label#paintFigure(org.eclipse.draw2d.Graphics)
	 */
	@Override
	protected void paintFigure(Graphics graphics) {
		super.paintFigure(graphics);
		Rectangle bound = getBounds();
		graphics.setBackgroundColor(ColorConstants.white);
		graphics.fillRectangle(FigureUtils.adjustForLineBorder(bound));		
		graphics.setBackgroundColor(ColorConstants.button);
		graphics.fillRectangle(bound.x - UP.getBounds().width + bound.width, bound.y + 2, UP.getBounds().height, bound.height-2);		
		graphics.drawImage(UP,bound.x - UP.getBounds().width -2 + bound.width, bound.y + 2);
		graphics.drawImage(DOWN,bound.x - UP.getBounds().width - 2 + bound.width, bound.y + bound.height - UP.getBounds().height );
	}
}

图片见附件。其他的就不解释了。

 

  • pic.rar (1.6 KB)
  • 下载次数: 44
分享到:
评论

相关推荐

    SWT控件知识学习笔记

    ### SWT控件知识学习笔记 #### 一、SWT/JFace常用组件介绍 SWT (Standard Widget Toolkit) 是 Eclipse 平台的一个图形界面工具包,它提供了与平台无关的 GUI 组件,允许开发者构建高性能的应用程序。SWT/JFace ...

    [转]TextArea TextField 文本 即时显示最后一行

    在IT行业中,文本输入控件是用户界面设计中不可或缺的一部分,它们允许用户输入和编辑文本。在本文中,我们将深入探讨“TextArea”和“TextField”这两个在ActionScript 3(AS3)中用于处理文本输入的组件,以及如何...

    Ext表单组件之textField

    本篇我们主要关注"Ext表单组件之textField",它是最基础也是最常用的输入控件,用于接收用户的文本输入。 一、Ext.form.TextField简介 Ext.form.TextField是Ext JS中的一个核心组件,它允许用户在表单中输入单行...

    ExtJs5 去掉textfield边框

    在ExtJs5中,开发人员有时需要自定义UI以满足特定的设计需求,比如去掉`textfield`组件的边框。在给定的描述中,我们看到开发者遇到了一个问题:默认情况下,ExtJs5的`textfield`组件有明显的边框,但通过添加特定的...

    EXT表单验证之TextField

    在EXT表单中,TextField是最常见的输入控件,用于接收用户的文本输入。`vtype`是EXT TextField的一个关键属性,用于定义输入字段的验证规则,确保用户输入的数据符合特定格式或条件。 EXT中的TextField支持多种...

    TextField使用小惊奇

    在Android开发中,`TextField`是用于用户输入文本的基本组件,尤其在构建用户界面时扮演着重要角色。在本文中,我们将深入探讨`TextField`如何实现多行输入,即自动换行的功能,并揭示一个小小的惊喜——只需导入一...

    文本编辑器-textField实现

    总结来说,“文本编辑器-textField实现”项目涉及到使用`TextField`或`TextArea`创建一个基础的文本输入区域,通过`RichTextFX`库扩展其功能,实现文本格式化、颜色设置、字号调整和字体选择。这样的编辑器对开发者...

    Swift 语言 - 基本控件 lable button textField 上传相册照片

    在Swift中,基本控件是构建用户界面的核心元素,它们使得用户能够与应用程序进行交互。在这里,我们将深入探讨Swift中的`label`(标签)、`button`(按钮)和`textField`(文本字段),以及如何利用它们来实现从系统...

    extjs 5 textfield 金额控件扩展

    EXTJS 5 Textfield 金额控件扩展就是为了满足这一需求而设计的。这个扩展提供了一个专门的组件,它增强了标准的Textfield,增加了对货币格式化和验证的支持。 EXTJS是一个强大的JavaScript库,主要用于构建富客户端...

    Java中TextField类.pdf

    Java中的`TextField`类是Swing库中的一个基础组件,用于创建用户可以在其上输入文本的单行文本字段。在GUI编程中,`TextField`是一个非常常见的元素,它允许用户输入和编辑一行文本。以下是对`TextField`类的详细...

    一套完整的强大的qml自定义控件

    一套完整的自定义的qmlGUI控件,功能强大完全可以拿去开发项目而不用重复造轮子。包括Button,Calendar,CheckBox,ComboBox,CtrlDialog,DateEdit,DatePicker,Dialog,FileDialog,ImageButton,Label,LineEdit...

    基于TextField的图文混编的组件

    TextField在Flash中是一个基础的文本显示和编辑控件,它可以处理简单的文本输入,但通过扩展和自定义,可以实现更复杂的图文混排。 标题“基于TextField的图文混编的组件”表明我们正在探讨如何利用TextField类构建...

    ios-模拟AlertView的textField输入框.zip

    在标题“ios-模拟AlertView的textField输入框.zip”中提到的问题,开发者遇到了`UIAlertController`无法直接显示多行文本输入的需求。在这种情况下,开发者选择创建一个自定义的解决方案来模拟`UIAlertView`的`...

    textField的一个简单例子

    在iOS开发中,`textField` 是一个非常常见的控件,用于接收用户输入的文字信息。在很多情况下,我们可能需要在用户交互时管理键盘的显示和隐藏,以优化用户体验。在这个"textField的一个简单例子"中,我们将探讨如何...

    flex3 textArea 高度自适应

    在Flex3中,`TextArea` 是一个常用的组件,用于显示多行可编辑的文本。当用户输入的内容增多时,为了提供良好的用户体验,我们通常希望`TextArea`的高度能够自适应地扩展,以显示所有内容,而无需滚动条或者内容被...

    libgdx——UI控件

    在`Scene2D`中,UI控件通常继承自`Actor`类,例如`Button`、`Label`、`Image`和`TextField`。每个控件都有自己的属性和方法,用于定制其外观和行为。 1. **Button**: 按钮是最基本的交互元素,可以响应点击事件。你...

    cocos2D-lua 核心编程内置代码

    在“Cocos2d-x之Lua核心编程(第二版)_配套代码”中,我们可以找到一系列的示例和代码,这些代码涵盖了Cocos2d-lua的核心功能和编程技巧。 一、Cocos2d-lua简介 Cocos2d-lua是Cocos2d-x的一个扩展,它允许开发者使用...

    textfield文件的自适应高度

    在iOS开发中,TextField是用户输入文本的基本控件,它通常用于收集用户的单行文本信息。然而,标准的UITextField在处理多行文本时可能存在局限,因为它默认不支持自适应高度,即不能根据输入内容的多少自动调整自身...

    TextField-InputView, UITextField InputView模式:终结注册类、信息采集类.zip

    在iOS开发中,`UITextField` 是一个非常重要的控件,用于接收用户输入的文字信息。而`InputView`是`UITextField`的一个属性,它允许我们自定义键盘上方的视图,以此来提供更丰富的用户交互体验。`TextField-...

Global site tag (gtag.js) - Google Analytics