首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中使用ActionListeners

在java中使用ActionListeners
EN

Stack Overflow用户
提问于 2012-10-22 01:27:32
回答 1查看 351关注 0票数 1

我有两个类:一个用于绘制applet,另一个用于添加actionListeners。小程序似乎没有正确添加actionListeners,因为我的小程序中的所有函数都不起作用。以下是我的代码片段:

这属于小程序类(StackApplet):

actListen是Listener类的新实例化。

代码语言:javascript
复制
public void init() {        
    try { 
        SwingUtilities.invokeAndWait(
            new Runnable() {
                @Override
                public void run() {
                    actListen.invokePush();
                    actListen.invokePop();
                }
            });
    } catch (Exception e) {

    }

这属于listener类:

代码语言:javascript
复制
public void invokePush() {
    pushListener = new ActionListener() {
        public void actionPerformed(ActionEvent act) {
            int currentSize = (int)myStack.size();
            try {
                if (currentSize == ceiling) {
                    StackApplet.pushField.setEnabled(false);
                    StackApplet.pushField.setForeground(Color.RED);
                    StackApplet.pushField.setText("Error: The stack is already full");                      
                } else if (currentSize == ceiling - 1) {                        
                    StackApplet.pushField.setForeground(Color.YELLOW);
                    StackApplet.pushField.setText("Warning: The stack is almost full"); 
                } else if (currentSize == 0) {
                    StackApplet.pushField.setText("weenie");
                }
            } catch (Exception e) {

            }
        }
    };
    StackApplet.pushBtn.addActionListener(pushListener);
}

小程序似乎没有正确地调用ActionListeners

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-22 01:43:27

我建议您传递引用并在这些引用上调用公共方法,如下所示:

代码语言:javascript
复制
public void init() {        
    try { 
        SwingUtilities.invokeAndWait(
            new Runnable() {
                @Override
                public void run() {
                    ActListen actListenInstance = new ActListen(StackApplet.this);
                    actListenInstance.invokePush();
                    actListenInstance.invokePop();
                }
            });
    } catch (Exception e) {
      e.printStackTrace();
    }
}

然后在ActListen的构造函数中接受StackApplet引用,然后使用该实例调用StackApplet的非静态方法。

像这样,

代码语言:javascript
复制
public void invokePush() {
    pushListener = new ActionListener() {
        public void actionPerformed(ActionEvent act) {
            int currentSize = (int)myStack.size();
            try {
                if (currentSize == ceiling) {
                    stackAppletInstance.ceilingReached();
                } else if (currentSize == ceiling - 1) {                        
                    stackAppletInstance.ceilingAlmostReached();
                } else if (currentSize == 0) {
                    stackAppletInstance.stackEmpty();
                }
            } catch (Exception e) {
                e.printStackTrace();  // ***** never leave this blank!
            }
        }
    };
    stackAppletInstance.addPushListener(pushListener);
}

您将希望努力避免使用静态任何东西,除非在某些情况下。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13000277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档