如果说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();
}
这里得提供在选中状态修改情况下修改修饰图片的功能,至少我们要提供选中与不选中下按钮的状态不一样把。
看看效果:
分享到:
相关推荐
"Draw2D模拟SWT控件之TextField、TextArea"这个主题聚焦于使用Draw2D库来模仿SWT(Standard Widget Toolkit)中的两种基本输入控件:TextField和TextArea。SWT是Eclipse基金会的一个开源项目,用于构建原生外观的...
在WinForm中,RadioButton控件是一个常见的选择控件,允许用户从一组互斥选项中选择一个。然而,系统默认的RadioButton控件在视觉效果上可能显得较为朴素,有时需要进行美化以提升用户体验。 本文将深入探讨如何...
如果被选中,我们将使用指定的颜色填充一个小椭圆,模拟RadioButton的选中状态。 接下来,为了让这个自定义控件可以被拖放到工具箱,我们需要在项目中注册这个控件。在Visual Studio中,可以通过以下步骤完成: 1....
RadioButton 和 RadioButtonList 控件 RadioButton 和 RadioButtonList 控件是 ASP.NET 中两种常用的表单控件,用于在网页上实现单选和多选功能。下面是对这两种控件的详细介绍。 RadioButton 控件 RadioButton ...
在.NET框架中,RadioButton控件通常用于在用户界面中提供单选选项,即一组选项中只能选择一个。然而,原生的RadioButton控件在Repeater控件中使用时,可能会遇到分组困难的问题,因为每个RadioButton默认是独立的,...
在Windows应用程序开发中,RadioButton控件是常用的交互元素,它允许用户从一组互斥的选项中选择一个。在默认情况下,RadioButton控件的外观相对简单,但可以通过自定义样式和扩展功能来实现美化,以提升用户体验。...
**SWT(SWT - Standard Widget Toolkit)** 是一个用于创建Java应用程序的开源图形用户界面(GUI)工具包,它提供了丰富的控件和与操作系统更紧密的集成。SWT是Eclipse项目的一部分,因此在Java开发领域,尤其是开发基于...
在C# WinForm应用开发中,自定义RadioButton控件是一种常见的需求,这通常涉及到扩展.NET Framework提供的默认RadioButton控件的功能,以满足特定的设计或交互需求。本教程将深入讲解如何在Visual Studio 2005及其更...
在.NET框架中,RadioButton控件通常用于提供单选选项,用户只能选择其中一个。然而,在复杂的Web应用程序中,尤其是在使用Repeater控件时,处理分组的RadioButton可能会变得有些棘手。`radiobutton控件重写`这个话题...
RadioButton实现多选一功能的方法,具体内容如下 一、简介 二、RadioButton实现多选一方法 1、将多个RadioButton放在一个RadioGroup里面 android:layout_width=match_parent android:layout_height=wrap_content...
在Android开发中,`RadioButton`和`RadioGroup`是实现单选功能的重要组件。`RadioButton`作为单选按钮,通常用于提供多个可选项中的一个,而`RadioGroup`则作为一个容器,用来管理这些`RadioButton`,确保一次只能有...
在这个“委托在RadioButton控件里面的应用实例”中,我们将探讨如何利用委托来实现RadioButton控件的事件处理。 首先,RadioButton控件通常用于在一组互斥选项中让用户选择一个。在Windows Forms中,RadioButton...
基本控件案例集锦,Button,TextView,EditText,Toast,RadioButton 基本控件案例集锦,Button,TextView,EditText,Toast,RadioButton 基本控件案例集锦,Button,TextView,EditText,Toast,RadioButton 基本...
在C# WPF(Windows Presentation Foundation)开发中,创建具有自定义样式的RadioButton控件是一项常见的任务。在本文中,我们将深入探讨如何实现一个“上图下文字”的RadioButton样式,并且能够动态生成这些...
"RadioButton控件"是其中一种常见的控件类型,通常用于在一组互斥选项中让用户选择一个。在这个特定的案例中,我们关注的是一个自定义的单选按钮实现,称为"DibRadioButton"。 自绘的单选按钮意味着它不是使用系统...
VC 获取RadioButton控件选中值,在平时的使用中,选中的RadioButton会有一个值传递到下一个环节中,本实例就是展示了如何获取用户选中的值。下面请看具体代码: void CDemoDlg::OnTest() { //获得组中单选...
在Android开发中,RadioButton和RadioGroup是两种常用的控件,它们在实现单选功能时扮演着重要角色。本文将深入探讨这两个控件的使用方法、它们之间的关系以及如何监听选中状态的变化。 首先,RadioButton是一种...
RadioButton是一种常用的控件,用于表示一组互斥的选择项。默认情况下,Android提供的RadioButton样式较为单一,可能无法满足某些设计需求。因此,自定义RadioButton的样式成为了一种常见的需求。 #### 自定义...