1

我有两个类:一个绘制小程序,一个添加 actionListeners。似乎小程序没有正确添加 actionListeners,因为我的小程序中的任何功能都不起作用。以下是我的代码片段:

这属于小程序类(StackApplet):

actListen 是 Listener 类的新实例。

public void init() {        
    try { 
        SwingUtilities.invokeAndWait(
            new Runnable() {
                @Override
                public void run() {
                    actListen.invokePush();
                    actListen.invokePop();
                }
            });
    } catch (Exception e) {

    }

这属于监听器类:

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);
}

似乎 Applet 没有正确调用 ActionListeners

4

1 回答 1

2

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

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 的非静态方法。

就像是,

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);
}

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

于 2012-10-21T17:43:27.020 回答