Blackberry:验证模式对话框输入,不允许保存/确定
各位黑莓开发者好 请告知我如何将用户输入的数据验证为两个基本字段(myName长度应超过2个字符;myFloat应>10.0),以及:Blackberry:验证模式对话框输入,不允许保存/确定,blackberry,dialog,validation,Blackberry,Dialog,Validation,各位黑莓开发者好 请告知我如何将用户输入的数据验证为两个基本字段(myName长度应超过2个字符;myFloat应>10.0),以及: 将包含错误数据的BasicEditField标记为红色 阻止用户单击“保存”(或“确定”)按钮 如果上述操作在Blackberry上不可行,还有什么其他方法吗 下面是我非常简单的测试用例。它是一个完整的代码src\mypackage\MyApp.java,如果您将其粘贴到JDE或Eclipse中,它将立即运行: package mypackage; impor
package mypackage;
import net.rim.device.api.system.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.ui.decor.*;
public class MyApp extends UiApplication {
public static void main(String args[]) {
MyApp myApp = new MyEdit();
myApp.enterEventDispatcher();
}
public MyApp() {
pushScreen(new MyScreen());
}
}
class MyScreen extends MainScreen {
MenuItem myItem = new MenuItem("Show my dialog", 0, 0) {
public void run() {
String[] buttons = { "Save", "Cancel" };
Dialog dialog = new Dialog("My dialog", buttons, null, 0, Bitmap.getPredefinedBitmap(Bitmap.INFORMATION));
EditField myNameField = new EditField("Name (must be > 2 chars): ", "",
TextField.DEFAULT_MAXCHARS, EditField.NO_NEWLINE);
dialog.add(myNameField);
BasicEditField myFloatField = new BasicEditField("Number: (must be > 10.0)", "",
5, EditField.FILTER_REAL_NUMERIC | EditField.EDITABLE);
dialog.add(myFloatField);
if (dialog.doModal() == 0) {
String myName = myNameField.getText();
float myFloat = 0.0f;
try {
myFloat = Float.parseFloat(myFloatField.getText());
} catch (NumberFormatException e) {
}
Status.show("Name: " + myName + ", Number: " + myFloat);
}
}
};
public MyScreen() {
setTitle(new LabelField("How to validate input?"));
addMenuItem(myItem);
}
}
在提出这个问题之前,我已经看过了,但我仍然不确定如何在Blackberry中验证用户输入(与之相比,我有一个非常清晰的图片,说明如何使用jQuery/PHP/Perl/任何形式在web脚本中验证用户输入)
谢谢大家!!
Alex您可以通过在编辑字段上设置
FieldChangeListener
来跟踪字段更改(使用setChangeListener()方法)。每次更改(添加或删除的字母)都会通知侦听器,因此您可以获取最新的编辑字段文本,并根据任何规则对其进行验证
将包含错误数据的BasicEditField标记为红色
如果验证失败,您可以更改一些颜色变量(MyScreen的私有成员)并请求编辑字段无效(使用field.invalidate()
),以便框架使用您刚刚设置的颜色重新绘制它
阻止用户单击“保存”(或“确定”)按钮
使用
对话框
无法执行此操作。因此,您需要通过扩展net.rim.device.api.ui.container.PopupScreen
来创建一个自定义弹出屏幕。在这个screen类中,您将拥有作为屏幕成员的按钮,因此您可以从编辑字段更改侦听器访问它们。如果验证失败,您可以禁用带有字段的按钮。setEnabled(布尔值)
是否尝试添加一些FocusChangeListeners,以及当EditField的焦点丢失时,执行验证。如果未验证,则将焦点设置回字段,并可能更改值。这并不是最好的方法,但它会起作用。但如果因为用户想按“取消”按钮而失去焦点会怎么样?嗯,我记不起何时会检测到更改,如果是在焦点丢失之后和下一个字段聚焦之前。如果它在下一个字段具有焦点后被触发,只需检查其中一个按钮是否具有焦点。对于红色,您是指扩展BasicEditField还是有更好的技巧?(我知道我可以设置一个红色虚线边框…)我的意思是你可以通过覆盖basicditfield.paint(Grahpics-Grahpics)
将文本颜色更改为红色,就像这里一样-