package dsrcom.ecq.client.util;
/**
* 将Spinner控件改写。
* setEditable(false)即可设其为不可用,但字体为黑色的效果
*
* @author cary.kong
* @2006-10-8
* @上午11:19:56
*/
import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.TypedListener;
public class SSpinner extends Composite {
static final int BUTTON_WIDTH = 16;
Text text;
Button up, down;
int minimum, maximum;
public SSpinner(Composite parent, int style) {
super(parent, style);
text = new Text(this, style | SWT.SINGLE | SWT.BORDER);
up = new Button(this, style | SWT.ARROW | SWT.UP);
down = new Button(this, style | SWT.ARROW | SWT.DOWN);
text.addListener(SWT.Verify, new Listener() {
public void handleEvent(Event e) {
verify(e);
}
});
text.addListener(SWT.Traverse, new Listener() {
public void handleEvent(Event e) {
traverse(e);
}
});
up.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
up();
}
});
down.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
down();
}
});
addListener(SWT.Resize, new Listener() {
public void handleEvent(Event e) {
resize();
}
});
addListener(SWT.FocusIn, new Listener() {
public void handleEvent(Event e) {
focusIn();
}
});
text.setFont(getFont());
minimum = 0;
maximum = 9;
setSelection(minimum);
}
void verify(Event e) {
try {
Integer.parseInt(e.text);
} catch (NumberFormatException ex) {
e.doit = false;
}
}
void traverse(Event e) {
switch (e.detail) {
case SWT.TRAVERSE_ARROW_PREVIOUS:
if (e.keyCode == SWT.ARROW_UP) {
e.doit = true;
e.detail = SWT.NULL;
up();
}
break;
case SWT.TRAVERSE_ARROW_NEXT:
if (e.keyCode == SWT.ARROW_DOWN) {
e.doit = true;
e.detail = SWT.NULL;
down();
}
break;
}
}
void up() {
setSelection(getSelection() + 1);
notifyListeners(SWT.Selection, new Event());
}
void down() {
setSelection(getSelection() - 1);
notifyListeners(SWT.Selection, new Event());
}
void focusIn() {
text.setFocus();
}
public void setFont(Font font) {
super.setFont(font);
text.setFont(font);
}
public void setSelection(int selection) {
if (selection < minimum) {
selection = minimum;
} else if (selection > maximum) {
selection = maximum;
}
text.setText(String.valueOf(selection));
text.selectAll();
text.setFocus();
}
public int getSelection() {
return Integer.parseInt(text.getText());
}
public void setMaximum(int maximum) {
checkWidget();
this.maximum = maximum;
resize();
}
public int getMaximum() {
return maximum;
}
public void setMinimum(int minimum) {
this.minimum = minimum;
}
public int getMinimum() {
return minimum;
}
void resize() {
Point pt = computeSize(SWT.DEFAULT, SWT.DEFAULT);
int textWidth = pt.x - BUTTON_WIDTH;
int buttonHeight = pt.y / 2;
text.setBounds(0, 0, textWidth, pt.y);
up.setBounds(textWidth, 0, BUTTON_WIDTH, buttonHeight);
down.setBounds(textWidth, pt.y - buttonHeight, BUTTON_WIDTH,
buttonHeight);
}
public Point computeSize(int wHint, int hHint, boolean changed) {
GC gc = new GC(text);
Point textExtent = gc.textExtent(String.valueOf(maximum));
gc.dispose();
Point pt = text.computeSize(textExtent.x, textExtent.y);
int width = pt.x + BUTTON_WIDTH;
int height = pt.y;
if (wHint != SWT.DEFAULT)
width = wHint;
if (hHint != SWT.DEFAULT)
height = hHint;
return new Point(width, height);
}
public void addSelectionListener(SelectionListener listener) {
if (listener == null)
throw new SWTError(SWT.ERROR_NULL_ARGUMENT);
addListener(SWT.Selection, new TypedListener(listener));
}
public void setEditable(boolean editable)
{
up.setEnabled(editable);
down.setEnabled(editable);
text.setEditable(editable);
}
}
分享到:
相关推荐
使用Spinner实现下拉列表,包括自定义下拉样式。 关键代码地址:http://www.cnblogs.com/huangzx/p/4437096.html
自定义Spinner实现初始为请选择之类的不参与列表的显示
使用spinner实现简单的计算功能,适合新手练习
android spinner 实现 下拉列表框 联动 代码
利用spinner实现省市二级联动源码
这个demo是关于android中Spinner控件的使用(Spinner就是下拉框)。 需求:在Spinner实现取value值与text值。 如有BUG 或者不完善,欢迎小伙伴们提出~
Android Spinner实现图片列表;通常的Spinner只能展示文字列表,此demo实现了Spinner展示图片列表。 支持sdk2.2及以上版本。
如何借助ArrayAdapter和Spinner实现下拉列表.zip,欢迎下载!
本人亲测,完全可以,完整代码,含layout布局文件代码
spinner 键值实现spinner 键值实现spinner 键值实现
NULL 博文链接:https://yafei.iteye.com/blog/1236647
如何借助SimpleAdapter和Spinner实现下拉列表.zip,欢迎下载!
android studio,demo,Spinner下拉菜单多选的实现,android studio3.0.1的环境下使用。
重写Spinner类,实现点击后弹出带有确认,取消按钮的dialog!listview有Radiobutton
支持输入筛选的类spinner实现(AndroidStudio源码)支持拼音(首字母)搜索
自定义Spinner控件,实现多选(前人基础),在此基础上添加了全选逻辑
spinner默认显示的字体颜色为纯黑色,在一些情况下,我们想要改变这种颜色,但是却发现在spinner的属性里面并没有setTextColor类似这样的属性,也就是说我们无法简单的直接设置其内部字体的颜色。
对于android项目开发来说,常常会用到Spinner实现下拉框的效果。而对于Spinner加载适配器的方法有多种: 1.直接加载android自带的ArrayAdapter,SimpleAdapter; 2.自定义继承BaseAdapter的适配器。 对于适配器加载...