1

2つのクラスがあります。1つはアプレットを描画し、もう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);
}

アプレットが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 に答える