Blackberry - ButtonField 可见性取决于 LabelField 焦点

发布于 2024-08-17 18:39:03 字数 125 浏览 4 评论 0 原文

我的 ui 中有 3 个字段 2 个按钮,一个位于标签字段的顶部,另一个位于标签字段的底部...每当标签字段获得焦点时,我希望按钮出现,并且我应该能够单击它们...并且当标签字段失去焦点时,按钮应该消失......我该怎么做......

I have 3 fields in my ui 2 buttons, one on top and other on buttom of a label field...when ever the label field gets focus i want the buttons to appear and i should be able to click on them...and when the label field loses focus the buttons should disappears..how can i do this...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

请止步禁区 2024-08-24 18:39:03

将一些管理器字段作为占位符放在按钮位置,然后添加 FocusChangeListener 来标记和使用 添加/删除 字段href="http://www.blackberry.com/developers/docs/4.5.0api/net/rim/device/api/ui/FocusChangeListener.html#focusChanged(net.rim.device.api.ui.Field,% 20int)" rel="nofollow noreferrer">focusChanged 显示/隐藏按钮。

更新
由于字段的每次焦点更改都可能会更改布局,因此最好将侦听器添加到添加到屏幕和占位符的每个字段:

class Scr extends MainScreen {
    HorizontalFieldManager placeholder = new HorizontalFieldManager() {
        public void add(Field field) {
            if (field.getFocusListener() != null)
                field.setFocusListener(null);
            field.setFocusListener(focusListener);
            super.add(field);
        }
    };
    ButtonField buttonField = new ButtonField("button",
            ButtonField.CONSUME_CLICK);
    LabelField labelField = new LabelField("label", FOCUSABLE);

    public Scr() {
        add(placeholder);
        add(labelField);
        add(new LabelField("label2", FOCUSABLE));
    }

    public void add(Field field) {
        if (!(field instanceof Manager)) {
            if (field.getFocusListener() != null)
                field.setFocusListener(null);
            field.setFocusListener(focusListener);
        }
        super.add(field);
    }

    FocusChangeListener focusListener = new FocusChangeListener() {
        public void focusChanged(Field field, int eventType) {
            if (eventType == FOCUS_GAINED) {
                if (field == labelField) {
                    if (buttonField.getManager() == null)
                        placeholder.add(buttonField);
                } else if (field != buttonField)
                    placeholder.delete(buttonField);
            }
        }
    };
}

put some manager field as a placeholder at button position, then add a FocusChangeListener to label and use add/delete field on focusChanged to show/hide button.

UPDATE
Since every focus change from fields may change layout, think its better to add listener to every field added to screen and placeholder:

class Scr extends MainScreen {
    HorizontalFieldManager placeholder = new HorizontalFieldManager() {
        public void add(Field field) {
            if (field.getFocusListener() != null)
                field.setFocusListener(null);
            field.setFocusListener(focusListener);
            super.add(field);
        }
    };
    ButtonField buttonField = new ButtonField("button",
            ButtonField.CONSUME_CLICK);
    LabelField labelField = new LabelField("label", FOCUSABLE);

    public Scr() {
        add(placeholder);
        add(labelField);
        add(new LabelField("label2", FOCUSABLE));
    }

    public void add(Field field) {
        if (!(field instanceof Manager)) {
            if (field.getFocusListener() != null)
                field.setFocusListener(null);
            field.setFocusListener(focusListener);
        }
        super.add(field);
    }

    FocusChangeListener focusListener = new FocusChangeListener() {
        public void focusChanged(Field field, int eventType) {
            if (eventType == FOCUS_GAINED) {
                if (field == labelField) {
                    if (buttonField.getManager() == null)
                        placeholder.add(buttonField);
                } else if (field != buttonField)
                    placeholder.delete(buttonField);
            }
        }
    };
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文