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

Draw2D 模拟SWT控件之RadioButton、CheckedBox

阅读更多

如果说Draw2D里内置了Button,我们其实直接用就行了,那么这里的RadioButton就彻底需要我们自己实现了。Draw2D只提供了CheckedBox的实现,鉴于CheckedBox与RadioButton的相似性,参考CheckedBox的实现就很容易模拟出RadioButton的效果了。

 

这两个按钮的实现其实很类似,就是前面显示的图形不一样,一个圆形,一个方形。这么相似,先用一个抽象类来封装一下共同点。

CheckedFigure.java

public abstract class CheckedFigure extends Figure {

	public static final Image CHECKBOX_CHECKED = createImage("icons/checkbox_checked.gif");

	public static final Image CHECKBOX_UNCHECKED = createImage("icons/checkbox_unchecked.gif");

	public static final Image RADIO_CHECKED = createImage("icons/radiobutton_checked.gif");

	public static final Image RADIO_UNCHECKED = createImage("icons/radiobutton_unchecked.gif");

	private static Image createImage(String name) {
		InputStream stream = CheckedFigure.class.getResourceAsStream(name);
		Image image = new Image(null, stream);
		try {
			stream.close();
		} catch (IOException ioe) {
		}
		return image;
	}

	private Image decrotorImage;
	private String text;

	protected boolean selection;

	public CheckedFigure() {
		this("Checkable");
	}

	public CheckedFigure(String text) {
		setText(text);
	}

	/**
	 * @return the decrotorImage
	 */
	public Image getDecrotorImage() {
		return decrotorImage;
	}

	/**
	 * @return the text
	 */
	public String getText() {
		return text;
	}

	/**
	 * @return the selection
	 */
	public boolean isSelection() {
		return selection;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.eclipse.draw2d.Label#paintFigure(org.eclipse.draw2d.Graphics)
	 */
	@Override
	protected void paintFigure(Graphics graphics) {
		super.paintFigure(graphics);
		Rectangle bound = getBounds();
		int y = bound.y + (bound.height - decrotorImage.getBounds().height) / 2
				+ 1;
		graphics.drawImage(decrotorImage, bound.x, y);
		graphics.drawText(getText(), bound.x + decrotorImage.getBounds().width
				+ 1, y + 1);
	}

	/**
	 * @param decrotorImage
	 *            the decrotorImage to set
	 */
	public void setDecrotorImage(Image decrotorImage) {
		this.decrotorImage = decrotorImage;
	}

	/**
	 * @param selection
	 *            the selection to set
	 */
	public abstract void setSelection(boolean selection);

	/**
	 * @param text
	 *            the text to set
	 */
	public void setText(String text) {
		this.text = text;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.eclipse.draw2d.Figure#setBounds(org.eclipse.draw2d.geometry.Rectangle
	 * )
	 */
	@Override
	public void setBounds(Rectangle rect) {
		//Ensure that the checked figure has a limited minimum height.
		if (rect.height < FigureConstants.CHECKED_FIGURE_MIN_HEIGHT) {
			rect.height = FigureConstants.CHECKED_FIGURE_MIN_HEIGHT;
		}
		super.setBounds(rect);
	}
}

 其中

FigureConstants.CHECKED_FIGURE_MIN_HEIGHT = 19

 

它是我根据图片的大小和文字的最小高度定的,防止Button被拉得太扁。。。关键的代码是

graphics.drawImage(decrotorImage, bound.x, y);
		graphics.drawText(getText(), bound.x + decrotorImage.getBounds().width
				+ 1, y + 1);

要准备的计算和绘制修饰图片和文字。修饰图片见附件。

下面来实现CheckedBoxFigure,好像多余了。。。Draw2D有了,不过它的跟我们的效果不一样,还是自己写比较一致。

public class CheckBoxFigure extends CheckedFigure {

	public CheckBoxFigure() {
		this("CheckBox");
	}

	public CheckBoxFigure(String text) {
		super(text);
		setDecrotorImage(CHECKBOX_UNCHECKED);
	}
	
	/**
	 * @param selection
	 *            the selection to set
	 */
	@Override
	public void setSelection(boolean selection) {
		this.selection = selection;
		setDecrotorImage(selection?CHECKBOX_CHECKED:CHECKBOX_UNCHECKED);
		repaint();
	}
}

 很简单,继承了CheckedFigure,使用了属于CheckedBox的图形,默认情况下是不选中的。再看RadioButton,我们花了很大代价就是要实现它。

public class RadioButtonFigure extends CheckedFigure {

	public RadioButtonFigure() {
		this("RadioButton");
	}

	public RadioButtonFigure(String text) {
		super(text);
		setDecrotorImage(RADIO_UNCHECKED);
	}


	/**
	 * @param selection
	 *            the selection to set
	 */
	public void setSelection(boolean selection) {
		this.selection = selection;
		setDecrotorImage(selection?RADIO_CHECKED:RADIO_UNCHECKED);
		repaint();
	}
}

 就是修饰图形不一样而已。大家可能要问,既然这么相似,为什么还有单独写一个类,用一个变量标志一下不就得了。呵呵,这里是有用意的,以后再讲。(用在GEF中,model和fiugre一一对应比较好)

 

public void setSelection(boolean selection) {
		this.selection = selection;
		setDecrotorImage(selection?RADIO_CHECKED:RADIO_UNCHECKED);
		repaint();
	}

这里得提供在选中状态修改情况下修改修饰图片的功能,至少我们要提供选中与不选中下按钮的状态不一样把。

看看效果:

  • pic.rar (1.3 KB)
  • 下载次数: 33
0
0
分享到:
评论

相关推荐

    Draw2D 模拟SWT控件之TextField、TextArea

    "Draw2D模拟SWT控件之TextField、TextArea"这个主题聚焦于使用Draw2D库来模仿SWT(Standard Widget Toolkit)中的两种基本输入控件:TextField和TextArea。SWT是Eclipse基金会的一个开源项目,用于构建原生外观的...

    C#WinForm控件美化扩展RadioButton

    在WinForm中,RadioButton控件是一个常见的选择控件,允许用户从一组互斥选项中选择一个。然而,系统默认的RadioButton控件在视觉效果上可能显得较为朴素,有时需要进行美化以提升用户体验。 本文将深入探讨如何...

    RadioButton和RadioButtonList控件

    RadioButton 和 RadioButtonList 控件 RadioButton 和 RadioButtonList 控件是 ASP.NET 中两种常用的表单控件,用于在网页上实现单选和多选功能。下面是对这两种控件的详细介绍。 RadioButton 控件 RadioButton ...

    c#自定义控件的制作,美化的RadioButton

    如果被选中,我们将使用指定的颜色填充一个小椭圆,模拟RadioButton的选中状态。 接下来,为了让这个自定义控件可以被拖放到工具箱,我们需要在项目中注册这个控件。在Visual Studio中,可以通过以下步骤完成: 1....

    radiobutton重写后的控件

    在.NET框架中,RadioButton控件通常用于在用户界面中提供单选选项,即一组选项中只能选择一个。然而,原生的RadioButton控件在Repeater控件中使用时,可能会遇到分组困难的问题,因为每个RadioButton默认是独立的,...

    RadioButton控件美化

    在Windows应用程序开发中,RadioButton控件是常用的交互元素,它允许用户从一组互斥的选项中选择一个。在默认情况下,RadioButton控件的外观相对简单,但可以通过自定义样式和扩展功能来实现美化,以提升用户体验。...

    SWT开发手册.zip

    **SWT(SWT - Standard Widget Toolkit)** 是一个用于创建Java应用程序的开源图形用户界面(GUI)工具包,它提供了丰富的控件和与操作系统更紧密的集成。SWT是Eclipse项目的一部分,因此在Java开发领域,尤其是开发基于...

    C# WinForm 自定义 RadioButton

    在C# WinForm应用开发中,自定义RadioButton控件是一种常见的需求,这通常涉及到扩展.NET Framework提供的默认RadioButton控件的功能,以满足特定的设计或交互需求。本教程将深入讲解如何在Visual Studio 2005及其更...

    radiobutton控件重写

    在.NET框架中,RadioButton控件通常用于提供单选选项,用户只能选择其中一个。然而,在复杂的Web应用程序中,尤其是在使用Repeater控件时,处理分组的RadioButton可能会变得有些棘手。`radiobutton控件重写`这个话题...

    Android控件RadioButton实现多选一功能

    RadioButton实现多选一功能的方法,具体内容如下 一、简介 二、RadioButton实现多选一方法 1、将多个RadioButton放在一个RadioGroup里面 android:layout_width=match_parent android:layout_height=wrap_content...

    Android进阶之RadioButton选中值的获取、单选多行

    在Android开发中,`RadioButton`和`RadioGroup`是实现单选功能的重要组件。`RadioButton`作为单选按钮,通常用于提供多个可选项中的一个,而`RadioGroup`则作为一个容器,用来管理这些`RadioButton`,确保一次只能有...

    委托在RadioButton控件里面的应用实例

    在这个“委托在RadioButton控件里面的应用实例”中,我们将探讨如何利用委托来实现RadioButton控件的事件处理。 首先,RadioButton控件通常用于在一组互斥选项中让用户选择一个。在Windows Forms中,RadioButton...

    基本控件案例集锦,Button,TextView,EditText,Toast,RadioButton

    基本控件案例集锦,Button,TextView,EditText,Toast,RadioButton 基本控件案例集锦,Button,TextView,EditText,Toast,RadioButton 基本控件案例集锦,Button,TextView,EditText,Toast,RadioButton 基本...

    c# WPF 上图下文字radiobutton样式,且可动态生成radiobutton,搭配触摸滚动条

    在C# WPF(Windows Presentation Foundation)开发中,创建具有自定义样式的RadioButton控件是一项常见的任务。在本文中,我们将深入探讨如何实现一个“上图下文字”的RadioButton样式,并且能够动态生成这些...

    RadioButton控件

    "RadioButton控件"是其中一种常见的控件类型,通常用于在一组互斥选项中让用户选择一个。在这个特定的案例中,我们关注的是一个自定义的单选按钮实现,称为"DibRadioButton"。 自绘的单选按钮意味着它不是使用系统...

    VC 6.0 获取RadioButton控件选中状态值.rar

    VC 获取RadioButton控件选中值,在平时的使用中,选中的RadioButton会有一个值传递到下一个环节中,本实例就是展示了如何获取用户选中的值。下面请看具体代码:  void CDemoDlg::OnTest()  {   //获得组中单选...

    Android控件系列之RadioButton与RadioGroup使用方法

    在Android开发中,RadioButton和RadioGroup是两种常用的控件,它们在实现单选功能时扮演着重要角色。本文将深入探讨这两个控件的使用方法、它们之间的关系以及如何监听选中状态的变化。 首先,RadioButton是一种...

    android 自定义RadioButton的样式

    RadioButton是一种常用的控件,用于表示一组互斥的选择项。默认情况下,Android提供的RadioButton样式较为单一,可能无法满足某些设计需求。因此,自定义RadioButton的样式成为了一种常见的需求。 #### 自定义...

Global site tag (gtag.js) - Google Analytics