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来实现下拉列表,以及如何自定义其样式。 首先,我们来了解Spinner的基本用法。在XML布局文件中,可以添加一个Spinner元素: ```xml <Spinner android:id="@+id/spinner" ...
这篇博客“android 用Button+dialog实现spinner”正是探讨了如何结合Button和Dialog来实现这样的功能。 首先,我们要了解Spinner的基本用法。Spinner通常通过Adapter(如ArrayAdapter或CursorAdapter)与数据集关联...
在本教程中,我们将探讨如何利用Spinner实现一个简单的计算器,这是一项非常适合初学者练习的项目。 首先,我们需要了解Spinner的基本用法。在布局XML文件中,我们创建一个Spinner元素,并通过`android:id`属性为其...
这可以通过在Spinner的布局中添加一个单独的TextView来实现。例如: ```xml <Spinner android:id="@+id/my_spinner" android:layout_width="match_parent" android:layout_height="wrap_content" /> android:...
在Android开发中,Spinner是一个非常常用的控件,它用于实现下拉列表的功能,可以供用户在有限的选项中选择一个。本篇文章将详细介绍如何在Android中实现Spinner的联动效果,即当用户在一个Spinner中选择一个选项后...
本示例“android Spinner value值与text值”旨在教你如何在Spinner中同时获取选中项的显示文本(text)和对应的数据值(value)。在实际应用中,数据值通常用于程序逻辑处理,而显示文本则直接呈现给用户。 1. **...
【安卓 Spinner 实现省市级联】是Android开发中常见的需求,用于在应用程序中创建一个下拉选择组件,展示省、市、区等地理层级的数据。Spinner控件在Android中广泛用于实现有限选项的选择,通常与Adapter配合使用,...
本示例主要讲解如何利用Spinner实现省市二级联动的功能,这是一个在许多应用中都需要用到的功能,如地址填写、定位服务等。下面将详细介绍这个过程。 首先,我们需要明白什么是二级联动。二级联动是指在一个选择框...
android:text="显示Spinner" /> ``` 然后,在按钮的点击事件中展示Spinner: ```java Button button = findViewById(R.id.button_show_spinner); button.setOnClickListener(new View.OnClickListener() { @...
在给定的“Android Spinner实现图片列表”示例中,开发者通过自定义适配器和视图,成功地扩展了Spinner的功能,使其可以显示包含图片的列表。 1. **Spinner基本概念** Spinner是Android中的一个选择器组件,它可以...
本教程将详细解释如何利用ArrayAdapter和Spinner来创建一个功能完备的下拉列表。 一、Spinner简介 Spinner是Android SDK中的一个组件,类似于iOS中的PickerView。它的主要作用是在有限的选项中让用户做出单选决策,...
在Android SDK原生组件中,Spinner并不直接支持多选,但我们可以利用Checkbox或RadioButton结合Adapter来模拟实现。 1. **创建布局文件**:在res/layout目录下创建一个新的XML布局文件,如`multi_select_item.xml`...
本教程将详细介绍如何利用SimpleAdapter和Spinner来实现这样的功能。 首先,我们需要了解Spinner的基本用法。Spinner是一个继承自AbsSpinner的视图,它在默认状态下显示一个单行文本,点击后会展开一个下拉列表。...
Spinner在Android中是通过`Spinner`类来创建的,可以使用XML布局或代码动态添加。在XML布局中,我们通常会使用`<Spinner>`标签,并通过`android:entries`属性指定数据源,如数组资源或适配器。 2. **ArrayAdapter...
本篇文章将详细讲解如何自定义一个Android Spinner的下拉框实现,以提供更加个性化的用户体验。 首先,我们需要了解Spinner的基本用法。Spinner通常通过Adapter来绑定数据源,常见的有ArrayAdapter、...
本教程将深入探讨如何实现一个自定义的Spinner,该Spinner是通过结合TextView和Dialog来创建的,以提供更灵活和个性化的用户体验。 ### 自定义Spinner的基本原理 1. **TextView**:TextView是Android中的基本组件...
spinner默认显示的字体颜色为纯黑色,在一些情况下,我们想要改变这种颜色,但是却发现在spinner的属性里面并没有setTextColor类似这样的属性,也就是说我们无法简单的直接设置其内部字体的颜色。
然而,系统默认的Spinner样式可能不能满足所有设计需求,因此开发者常常需要自定义Spinner来实现更丰富的交互效果。本节我们将深入探讨如何使用PopupWindow实现一个自定义的Spinner,以获得类似网站下拉窗口的效果。...
**WPF Spinner实现** 在Windows Presentation Foundation (WPF)中,Spinner是一种常见的用户界面元素,通常用于数值选择或进度指示。它由两个箭头按钮组成,一个用于增加值,另一个用于减少值。在这个项目中,我们...