Frage

Ich bin entwickeln [ing eine Anwendung, bei Eingabe eines Ticker-Symbol in einem Textfeld den Plot eines Diagramms Aktienkurs aufruft. Ich möchte auch durch Auswahl von Menüpunkten dieses Diagramm auf eine bestimmte Weise modifizieren.

In der Software-Bedingungen wäre es am einfachsten, wenn ich die Menüpunkt ActionListeners den Wert eines Statusparameter haben könnte sich ändern, dann einfach die TextField- Action rufen Sie das Diagramm neu zu zeichnen.

Es gibt natürlich auch andere Möglichkeiten, um dies zu erreichen, aber gibt es eine Möglichkeit, eine Aktion Hörer anrufen aus einer anderen Action. Der Compiler nicht wie die Idee.

Vielen Dank im Voraus für alle Einsichten.

John Doner

War es hilfreich?

Lösung

Sie versuchen, eine Klasse zu erstellen, die sowohl fungiert als Teilnehmer und einen Verlag. haben Sie einfach Ihre Klasse, um den Action-Schnittstelle implementieren, sondern auch eine Art und Weise zu ActionListeners in Ihrer Klasse zu abonnieren.

public class MyActionSubPub
{
    private List<ActionListener> downstreams = new ArrayList<ActionListener>();
    public MyActionSubPub( AbstractButton(or whatever) button )
    {
        button.addActionListener( this );
    }
    public addActionListener( ActionListener listener )
    {
        downstreams.add( listener );
    }
    public void actionPerformed( ActionEvent event )
    {
        ... do your stuff ...
        ... loop through all downstreams, call actionPerformed on each...
    }
}

Alternativ können Sie einen Adapter erstellen, um das Ereignis zu einer Klasse sendet, wartet auf sie zurück, dann die Aktion in die nächste Klasse sendet.

Andere Tipps

Eine Möglichkeit, dies zu tun, wäre Ihr ActionListeners „dünn“ zu machen und sie zu einer privaten Methode irgendwo delegieren, zum Beispiel:

class Controller {
    ... // variable declarations etc

    public Controller() {
        textField.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {
            setStockSymbol(...);
            replot();
        }});
        menuItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {
            setStatusParameter(...);
            replot();
        }});
    }

    private void replot() {
        // Do whatever
    }
}

Diese Faktoren aus dem replotting Teil von beiden ActionListeners. Wenn Sie andere Codepfade benötigen einen Replot auszulösen, dann ist es jetzt einfach diejenigen zu implementieren, und Ihre Plotten Code jetzt ist schön aus dem Parameter Update-Code getrennt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top