Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Blackberry:验证模式对话框输入,不允许保存/确定_Blackberry_Dialog_Validation - Fatal编程技术网

Blackberry:验证模式对话框输入,不允许保存/确定

Blackberry:验证模式对话框输入,不允许保存/确定,blackberry,dialog,validation,Blackberry,Dialog,Validation,各位黑莓开发者好 请告知我如何将用户输入的数据验证为两个基本字段(myName长度应超过2个字符;myFloat应>10.0),以及: 将包含错误数据的BasicEditField标记为红色 阻止用户单击“保存”(或“确定”)按钮 如果上述操作在Blackberry上不可行,还有什么其他方法吗 下面是我非常简单的测试用例。它是一个完整的代码src\mypackage\MyApp.java,如果您将其粘贴到JDE或Eclipse中,它将立即运行: package mypackage; impor

各位黑莓开发者好

请告知我如何将用户输入的数据验证为两个基本字段(myName长度应超过2个字符;myFloat应>10.0),以及:

  • 将包含错误数据的BasicEditField标记为红色
  • 阻止用户单击“保存”(或“确定”)按钮
  • 如果上述操作在Blackberry上不可行,还有什么其他方法吗
  • 下面是我非常简单的测试用例。它是一个完整的代码src\mypackage\MyApp.java,如果您将其粘贴到JDE或Eclipse中,它将立即运行:

    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)
    将文本颜色更改为红色,就像这里一样-