2

在此处输入图像描述 嗨,我想创建一个登录屏幕,其中包含用户名和密码以及登录按钮但是当用户未能在用户名或密码的 TextField 内输入正确信息时,应该会从角落弹出一个像图像聊天对话框这样的弹出窗口TextField 的右侧显示适当的消息如何实现此自定义?

4

1 回答 1

4

我给你一个简单的方法。如果它对您的问题不完美,您只需忽略此答案。

在这里,我做了如下的逻辑。我给了你两个按钮 1)登录 2)删除

我想你知道如何验证你的文本字段是对还是错;保留一个 if 条件,如果正确则写下你的逻辑,否则不需要任何字段,否则你有三个条件

1) id 错误 2) 密码错误或 3) 两者都错误

根据两个条件,您可以在上面的文本字段上添加特定的工具提示框。

我也为错误条件和删除条件提供样本

使其成为您的要求

资源 :

背景需要 chat.png 图片在此处输入图像描述

示例代码:

package mypackage;

import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.XYEdges;
import net.rim.device.api.ui.component.BasicEditField;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.ui.decor.Border;
import net.rim.device.api.ui.decor.BorderFactory;

/**
 * A class extending the MainScreen class, which provides default standard
 * behavior for BlackBerry GUI applications.
 */
public final class MyScreen extends MainScreen implements FieldChangeListener
{
    /**
     * Creates a new MyScreen object
     */
    private BasicEditField id,password;
    private ButtonField login,cancel;
    private  VerticalFieldManager id_mgr,pass_mgr;
    private PopupField id_hint,pass_hint;
    public static Bitmap img;
    public MyScreen()
    { 
        img=Bitmap.getBitmapResource("chat.png");
        // Set the displayed title of the screen       
        setTitle("Login Page");
        Border b=BorderFactory.createRoundedBorder(new XYEdges(5, 5, 5, 5), Border.STYLE_SOLID);
        id_hint=new PopupField("Wrong Id", img);

        pass_hint=new PopupField("Wrong password", img);
        id_mgr=new VerticalFieldManager();

        id=new BasicEditField(){
            protected void layout(int width, int height) {
                super.layout(120, 40);
                setExtent(120, 40);

            }
        };
        id.setBorder(b);
        add(id_mgr);
        add(id);
        pass_mgr=new VerticalFieldManager();
        password=new BasicEditField(){
            protected void layout(int width, int height) {
                super.layout(120, 40);
                setExtent(120, 40);

            }
        };
        password.setBorder(b);
        add(pass_mgr);
        add(password);



        login=new ButtonField("Login");
        login.setChangeListener(this);
        add(login);

        cancel=new ButtonField("Remove");
        cancel.setChangeListener(this);
        add(cancel);

    }
    public void fieldChanged(Field field, int context) {
        if(field==login)
        {
            try {
//              id_mgr.add(new NullField(Field.FOCUSABLE));
                id_mgr.add(id_hint);
                id_mgr.setPadding(0, 0, 0, 50);
                pass_mgr.add(pass_hint);
                pass_mgr.setPadding(0, 0, 0, 50);
                id_hint.setFocus();
            } catch (IllegalStateException e) {
                return;
            }
        }else if(cancel==field)
        {
            synchronized (UiApplication.getEventLock()) {
                id_mgr.deleteAll();
                pass_mgr.deleteAll();
            }
        }

    }
}

PopupField.java 的类是

package mypackage;

import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Color;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.component.BitmapField;

public class PopupField extends BitmapField{
    private  Bitmap img,scalled_img;
    private String message;
    private int layout_width;

    public PopupField(String message,Bitmap img)
    {
        this.message=message;
        layout_width=this.getFont().getAdvance(message)+40;
        scalled_img=new Bitmap(layout_width, img.getHeight());
        img.scaleInto(scalled_img, Bitmap.FILTER_BILINEAR);
        this.img=scalled_img;
    }

    protected void layout(int width, int height) {

        super.layout(img.getWidth(), img.getHeight());
        setExtent(img.getWidth(), img.getHeight());

    }

    protected void paint(Graphics graphics) {
        graphics.drawBitmap(0, 0, img.getWidth(), img.getHeight(), img,0,0);
        graphics.setColor(Color.RED);
        graphics.drawText(message,20,20);
        super.paint(graphics);
    }

}

输出图像:在此处输入图像描述

继续帮助别人

其他解决方案是这个链接会告诉你 http://v4ks1n.wordpress.com/2011/01/28/tooltips-class-for-blackberry/

于 2012-06-11T07:21:50.390 回答