ComboBox是SWT中很常见的空间,在Draw2D里我们又得自己去实现它。
SWT Designer中的效果很好,我们就参考它来实现ComboBox。
先看看效果:
拆分一下,Combo主要为两部分:左边的输入选择栏和右边的箭头式按钮。右边的按钮又是一个图片了,而左边的文字,直接绘制上去得了。
ComboBoxFigure.java:
public class ComboBoxFigure extends Label {
private static final Image IMAGE = createImage("icons/combobox.gif");
private static Image createImage(String name) {
InputStream stream = ComboBoxFigure.class.getResourceAsStream(name);
Image image = new Image(null, stream);
try {
stream.close();
} catch (IOException ioe) {
}
return image;
}
public ComboBoxFigure() {
this("");
}
public ComboBoxFigure(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);
graphics.drawImage(IMAGE, bound.x + bound.width - IMAGE.getBounds().width, bound.y + 2);
}
/* (non-Javadoc)
* @see org.eclipse.draw2d.Label#setText(java.lang.String)
*/
public void setText(String s) {
super.setText(s);
repaint();
}
}
几个常量说明一下:
FigureConstants.COMBOBOX_DEFAULT_WIDTH = 100 //Combo的默认宽度
FigureConstants.COMBOBOX_FIXED_HEIGHT = 21//Combo的指定高度
paintFiugure的时候,依然要注意一些细微的调节,这些都是为了使绘制出来的图形更好看一些而已,分析代码可以发现,左边的文字也是绘制上去的。
这里的ComboBox也仅仅是外观上的模拟,并没有一些事件响应和操作处理,在图形编辑器下,我们需要外观上的模拟也就够了。
图片见附件。
- 大小: 125 Bytes
分享到:
相关推荐
C# 自定义控件 自定义ComboBox。其他控件的自定义与此类似。
Delphi为StringGrid网格显示控件中增加下拉框功能,也就是在Grid控件中添加Combobox下拉列表的功能,在任意列显示一个ComboBox功能,如演示截图所示,可大大扩展Grid的功能。生成列表: with Sender as TComboBox ...
开发语言C#。.net开发环境。对C#WinForm控件展系列之ComboBox组合框控件。对学习控件扩展很有用
用edit和list模拟ComboBox,演示SetWindowPos的使用。以控制list后的控件。是‘CtrlBehindList’的改进(有滚动条时有问题),
C# 控件 DropDownList控件和comboBox控件自动生成年月日 方便易用,对初学者,老程序员都有很大的帮助。
用eclipse的SWT编写的Combobox控件联动菜单: 将MySql数据库的主分类读入combo中,然后通过判断数据库中ID从而得到相应子分类中的数据,然后将数据读入到subcombo Mysql数据库文件: 主分类表:mcc id MainClass 0 ...
DataGridView控件中加入ComboBox下拉列表框
自定义combobox带treeview功能的控件,非常实用
在DataGridView控件中加入ComboBox下拉列表框的实现
C#自定义控件--美化ComboBox源码
自己考虑到可以用一个ComboBox和一个ListView结合做一个能够显示多列内容的ComboBox下拉框,可以将一个数据表绑定到ComboBox中的用户控件。 界面和用法:...
自定义combobox带DataGrid下拉,可以定义搜索字段,添加按钮,功能的控件,非常实用
linux下lazarus开发ide里BGRAControls控件库comboBox示例,原来lazarus也可以有开发出很有个性化的界面,并且能运行中动态调整
C#控件之美化ComboBox源码.rar
ComboBox控件可以输入文本也可以提供列表来选择项,而且还自带有属性来实现自动匹配,但是它有一个弊端,只能从头开始匹配,例如"张三丰",输入"三"或“三丰”是匹配不了。该自定义控件利用visual studio2017开发,...
用eclipse的SWT编写的Combobox控件联动菜单: 将MySql数据库的主分类读入combo中,然后通过判断数据库中ID从而得到相应子分类中的数据,然后将数据读入到subcombo Mysql数据库文件: 主分类表:mcc id MainClass ...
利用VC控件ComboBox编写的代码,对了解控件ComboBox很有帮助。
C# ListView中添加ComboBox等控件 效果见 http://blog.csdn.net/xuegacl/article/details/49795479
C#WinForm的ComboBox控件自定义实现自动模糊匹配查找数据的方法 与控件自带的AutoCompleteMode类似,完美实现模糊匹配,解决AutoCompleteMode只能从左向右匹配的问题
listview 日期控件 图片控件 combobox treeview 计算器 单,多选,获取文件.zip )计算器等的制作,还有对listview 日期控件 图片控件 combobox treeview 的应用和解释。。。。