2012-04-07 9 views
0

Ich habe Probleme, den Wert einer Zeichenfolge zu erhalten, die ich in einem Aktion Listener angegeben habe.Wie erhalten Sie eine Zeichenfolge aus einem actionListener?

Ich versuche UserMessage von dieser Aktion Hörer zuzugreifen:

public class UpdateButtonListener implements ActionListener 
{ 

    public void actionPerformed(ActionEvent e) 
    {  
     String UserMessage; 
     UserMessage = MessageTextArea.getText(); 
     System.out.println("This is your message: " + UserMessage); 
    } 
} 

es dann von dieser Action Zugang:

private class EncodeButtonListener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     //print Message 
     System.out.println("Your Message: " + UserMessage); 
    } 
} 

Sie sind in verschiedenen Klassen im selben Paket. Ich kann den vollständigen Code bei Bedarf hinzufügen.

Dank

Zusätzliche Informationen: Was ich will, ist geschehen, wenn ich entweder die Encode oder Decode Button geklickt haben. Der Aktionslistener, der über diese Schaltflächen ausgeführt wird, um über die Schaltfläche "Aktualisieren" auf den Aktionslistener zuzugreifen. Der Grund, dass ich die Update-Taste habe, ist, den Text zu erhalten, den der Benutzer eingegeben hat.

+0

Möchten Sie auf das private Feld auf der Methode actionPerformed des UpdateButtonListener zugreifen, von der actionPerformed von DecodeButtonListener? Sie können einfach nicht, wenn Sie die Variable äußerste der beiden Klasse deklarieren ... Vielleicht verstehe ich die Frage nicht, können Sie es besser erklären? – aleroot

+0

Was Sie brauchen, ist im Grunde ein Verweis auf MessageTextArea, ich denke, wir müssen die Struktur sehen, um richtig zu beantworten – SelimOber

+0

Würde es helfen, wenn alle Code für beide veröffentlicht? –

Antwort

0

Ich denke, es ist ein Problem mit dem Umfang. Der Bereich von UserMessage befindet sich in actionPerformed.

Versuchen Sie "String UserMessage" außerhalb von actionPerformed zu deklarieren, und dann können Sie es entweder veröffentlichen, in diesem Fall sollten Sie "UpdateButtonListener.UserMessage" schreiben oder eine Funktion erstellen, die den Wert von UserMessage zurückgibt .

+0

In welchem ​​actionListener? –

0

Ich empfehle das: Verwenden Sie einfach ActionListern Methoden aufzurufen!

public ActionPanel() { 
    // Actions 
    private final Action aEncode = new AbstractAction("Encode") { 
     public void actionPerformed(ActionEvent event) { 
      encodeMessage(); 
     } 
    } 
    private final Action aUpdate = new AbstractAction("Update") { 
     public void actionPerformed(ActionEvent event) { 
      setMessage(messageTextArea.getText()); 
     } 
    } 

    // Buttons 
    private final JButton encodeButton= new JButton(aEncode); 
    private final JButton updateButton= new JButton(aUpdate); 
    private final JTextArea messageTextArea= new JTextArea(); 

    private String message; 

    public ActionPanel() { 
     //Create two rows and one column 
     setLayout(new GridLayout(2,1)); 

     //Add border to panel 
     setBorder(BorderFactory.createTitledBorder("Excute")); 

     //Add button to panel 
     add(encodeButton); 
     add(updateButton); 
     //add(messageTextArea); 
    } 

    private void encodeMessage() { 
     System.out.println("Your Message: " + message.getMessage()); 
    } 

    private void setMessage(String message) { 
     this.message = message; 
     System.out.println("This is your message: " + message); 
    } 

    public String getMessage() { 
     retuen this.message; 
    } 
} 
+0

Danke Ich habe meinen Code ein wenig geändert, damit er zu Ihnen passt, aber er nimmt immer noch nicht die aktualisierte Nachricht aus dem Bereich auf. –

+0

Sorry, ich war unterwegs. Ich hoffe jetzt, dass du den Code brauchst. Wie ich dir schon gesagt habe: Benutze den Listener nicht, um Dinge zu tun, sie sollten nur Methoden aus der Klasse (Modell) aufrufen. –

Verwandte Themen