user-interface - 如何在 BlackBerry 应用程序中制作超链接?

标签 user-interface blackberry java-me custom-controls

谁能告诉我如何在 BlackBerry 中制作超链接?

最佳答案

这里有一个看起来像超链接的自定义标签字段,它可以打开一个新的屏幕。我们将其命名为 SampleOpenScreenHyperLinkField 并将其添加为上下文或完整菜单项。

  • 创建应用入口点
  • 创建示例屏幕并添加自定义标签字段

首先是入口点。

package sample;

import net.rim.device.api.ui.UiApplication;

/**
 * The entry point to application startup.
 */
public class SampleApp extends UiApplication {

    /**
     * The entry point.
     * 
     * @param args
     */
    public static void main(String[] args) {
        // Create a new instance of the application
        // and start the application on an event thread
        SampleApp app = new SampleApp();

        app.enterEventDispatcher();
    }

    /**
     * Basic constructor.
     */
    public SampleApp() {
        UiApplication.getUiApplication().pushScreen(new SampleScreen(1));
    }
}

接下来,您的示例屏幕。

package sample;

import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.MainScreen;

public class SampleScreen extends MainScreen {


    public SampleScreen(int screenNumber) {

        super(Manager.NO_VERTICAL_SCROLL | Manager.NO_VERTICAL_SCROLLBAR);
        this.add(new RichTextField("Screen " + screenNumber));
        int nextScreenNumber = screenNumber +1; 
        this.add(new SampleOpenScreenHyperLinkField("Screen " + nextScreenNumber, nextScreenNumber));
    }
}

现在,为您的自定义标签字段。

package sample;
import net.rim.device.api.ui.ContextMenu;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.FontFamily;
import net.rim.device.api.ui.MenuItem;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.LabelField;

/**
 * 
 * @author chad.lafontaine
 *
 */
public class SampleOpenScreenHyperLinkField extends LabelField {

    private int pageCount = -1;
    private MenuItem mGetLinkMenuItem;
    /**
     * 
     * @param hyperlinkLabel - label to display link
     */    
    public SampleOpenScreenHyperLinkField(String hyperlinkLabel, int pageCount) {
        super(hyperlinkLabel, FOCUSABLE);
        this.pageCount = pageCount;
        Font font = getBasefontSize(10);
        setFont(font.derive(Font.UNDERLINED | Font.PLAIN));
        mGetLinkMenuItem = new SampleOpenScreenMenuItem(hyperlinkLabel);
    }

    /**
     * Context menu
     */
    public ContextMenu getContextMenu() {
        // Add our "Get Link" menu item to the context menu
        ContextMenu menu = super.getContextMenu();
        menu.addItem(mGetLinkMenuItem);
        return menu;
    }

    /**
     * Inner class 
     */
    class SampleOpenScreenMenuItem extends MenuItem {

        public SampleOpenScreenMenuItem(String menuLabel) {
            super(menuLabel, 0, 100);
        }

        public void run() {
            UiApplication.getUiApplication().pushScreen(new SampleScreen(pageCount));

        }

    }

    /**
     * Base font of the application. Method is static for other UI components to
     * call for calculation of display fields.
     * 
     * @return
     */
    public static Font getBasefontSize(int size) {
        Font baseFont = null;
        try {
            baseFont = FontFamily.forName("BBClarity").getFont(FontFamily.SCALABLE_FONT, size);
        } catch (ClassNotFoundException e) {
            baseFont = Font.getDefault().getFontFamily().getFont(FontFamily.SCALABLE_FONT, size);
        }

        return baseFont;
    }
}

结果:您应该有一个带有指向另一个屏幕的“超链接”的屏幕。如果您想改为调用浏览器怎么办?您可以为此使用以下类(class)。

package sample;

import net.rim.blackberry.api.browser.Browser;
import net.rim.device.api.ui.ContextMenu;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.FontFamily;
import net.rim.device.api.ui.MenuItem;
import net.rim.device.api.ui.component.LabelField;

/**
 * Custom action label to invoke a browser given a URL.
 */
public class InvokeBrowserHyperlinkField extends LabelField {
    private String mUrl;
    private MenuItem mGetLinkMenuItem;

    /**
     * Constructs a new HyperlinkField instance with provided label, style and
     * URL
     * 
     * @param label
     *            Label string to be displayed.
     * @param style
     *            Field style for the label.
     * @param url
     *            URL to be opened in the browser.
     */
    public InvokeBrowserHyperlinkField(String label, long style, String url) {
        super(label, style | FOCUSABLE);

        setFont(Font.getDefault().getFontFamily().getFont(FontFamily.SCALABLE_FONT, 10));

        mUrl = url;

        mGetLinkMenuItem = new MenuItem("Get Link", 0, 0) {
            public void run() {
                // invoke browser with URL
                Browser.getDefaultSession().displayPage(mUrl);
            }
        };
    }

    /**
     * Constructs a new HyperlinkField instance with provided label and url with
     * default style
     * 
     * @param label
     *            Label string to be displayed.
     * @param url
     *            URL to be opened in the browser.
     */
    public InvokeBrowserHyperlinkField(String label, String url) {
        this(label, 0, url);
    }

    public ContextMenu getContextMenu() {
        // Add our "Get Link" menu item to the context menu
        ContextMenu menu = super.getContextMenu();
        menu.addItem(mGetLinkMenuItem);
        return menu;
    }
}

结果:点击链接或菜单项,应将设备浏览器调用到所需的 URL。

关于user-interface - 如何在 BlackBerry 应用程序中制作超链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1600719/

相关文章:

user-interface - vaadin UI.getcurrent 在请求处理程序中返回 null

javascript - 实现用于输入数学公式的 GUI 的简单方法?

java-me - 我们可以在j2me中的Canvas上垂直绘制文本吗

ios - 在编辑时将 TextView 保持在键盘上方

java - 如何在 JavaFX 中延迟 10 秒在 TextArea 中追加文本?

java - 黑莓 - 以编程方式设置闹钟?

ide - 有没有在 Blackberry 上运行的免费移动 IDE?

blackberry - BlackBerry-HTML链接到App World中的应用程序

java - 如何编写 lwuit 单选按钮代码

java-me - Java 无线工具包与 Net beans 7.2