我对如何在Blackberry JDE中实现FieldChangeListener感到困惑。一种方法是让我的主类实现FieldChangeListener,然后在其中实现一个fieldchanged方法,另一种方法是让我执行:

    FieldChangeListener listenerUS = new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
System.out.println("Something changed!");
pushScreen(_newScreen);
}
};


无论哪种方式,如果我尝试调用一个方法(例如pushScreen或我编写的自定义方法),都会收到运行时错误。在调试模式下,也不会显示我的任何打印语句。但是,如果我直接删除fieldChanged方法,它甚至都不会编译,所以我很确定它在查看代码?

我已经通过以下方式将侦听器添加到我希望其连接的按钮上:

            but_temp.setChangeListener(this);


(在第一种情况下)或通过放置listenerUS。

一切似乎都已完成,但是我的打印语句显示出来了,如果我调用一个方法,则会收到运行时错误。

这有意义吗?我是否对如何在黑莓机上使用侦听器感到完全困惑?

http://pastie.org/618950

整个代码都有一个副本...

最佳答案

我看了看你的代码,没有任何公然的错误跳到我身上。但是,我不会指定主要的应用程序类作为FieldChangeListener的职责。这不是必须要意识到的事情。我能为您做的最好的事情就是提供一个示例应用程序,该应用程序为ButtonField实现FieldChangeListener接口。这不是解决方案,但是也许您可以通过更好地了解代码来挑出与本示例不同的内容。希望能帮助到你。

import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.component.ButtonField;
import net.rim.device.api.ui.FieldChangeListener;

/**
 * Test implementation of ButtonField.
 */
public class TestAppMain extends UiApplication
{
    /**
     * Default Constructor.
     */
    private TestAppMain() {
        pushScreen(new AppScreen());
    }

    /**
     * App entry point.
     * @param args Arguments.
     */
    public static void main(String[] args) {
        TestAppMain app = new TestAppMain();
        app.enterEventDispatcher();
    }

    /**
     * Main application screen.
     */
    private static class AppScreen extends MainScreen
    {
        /**
         * Default constructor.
         */
        public AppScreen() {
            LabelField title = new LabelField("Button Test Demo",
                    LabelField.ELLIPSIS | LabelField.USE_ALL_WIDTH);
            setTitle(title);

            // Create a button with a field change listener.
            FieldChangeListener listener = new FieldChangeListener() {
                public void fieldChanged(Field field, int context) {
                    ButtonField buttonField = (ButtonField) field;
                    System.out.println("Button pressed: " + buttonField.getLabel());
                }
            };
            ButtonField buttonField = new ButtonField("Test Button", ButtonField.CONSUME_CLICK);
            buttonField.setChangeListener(listener);
            add(buttonField);
        }

        /**
         * Handle app closing.
         */
        public void close() {
            Dialog.alert("Goodbye!");
            System.exit(0);
            super.close();
        }
    }
}

关于java - 黑莓JDE FieldChangeListener,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1433945/

10-10 21:50