2016-09-16 2 views
0

Ich möchte eine Frage im Zusammenhang mit dynamischen buttonactionPerformed. Ich habe jFrame mit Inhaltsmenü, das sich auf dynamische jPanel1 von cardLayout und jButton1 beziehen wird. Dynamisch jPanel1 enthalten saveButton. Ich habe Test ActionListener an jButton1 angefügt. Das Problem, mit dem ich konfrontiert bin, ist, dass ich actionCommand auf jPanel1.saveButton gesetzt habe, wie im folgenden Code gezeigt. Und wenn ich auf jButton1 Ausgabe klicke, bekomme ich 2 und 3. Ich wurde erwartet, dass 2nd und 3rdjPanel1.SaveButton auch geklickt wurde, aber nur 3rdjPanel1.saveButton geklickt wurde. Wie komme ich dazu, dass 2nd und 3rdjPanel1.SaveButton angeklickt wurden?dynamische jPanel Tasten actionCommand

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 

public class Test implements ActionListener { 

    public Test() { 
    } 

    public void actionPerformed(ActionEvent e) { 

     for (int i = 0; i<2; i++){ 
      jPanel1.save.setActionCommand(String.valueOf(i+2)); 
      String n = jPanel1.save.getActionCommand(); 
      jPanel1.save.doClick(); 
      System.out.println("jPanel1: " + n); 
     } 

      System.out.println("The action have been performed"); 
    } 

    public static void main(String[] agrs) { 
      JButton but = new JButton(); 
      but.addActionListener(new Test()); 
      but.doClick(); 
    } 
} 

Output: 
jPanel1: 2 
jPanel1: 3 
+0

'Test' Bitte geben Sie Ihre Testklassen beschreibender Namen. Tausend Leute, bevor Sie diesen Namen gewählt haben, und ich habe es satt, Klassen aus meinem generischen Testpaket zu löschen. So wie es aussieht, verstehe ich die Frage nicht. * "Wie bekomme ich das 2. und 3. jPanel1.SaveButton geklickt?" * Wenn '2' gedruckt wird, war es das zweite. Wenn "3" erscheint, war es der 3.. Allgemeiner: Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. –

+0

@Andrew Thompson Ich meinte, 'jPanel1.save.doClick();' wurde nur für dynamische 'jPanel1' mit' actionCommand3' durchgeführt. Im Fall von 'jPanel1' mit 'actionCommand 2' kein Sinn. – hub

Antwort

2

Wenn Sie jeden ActionListener Instanz verweisen auf einen anderen JPanel möchten, können Sie einen Verweis auf dieses `JPanel geben‘ an den Konstruktor:

JPanel panel1 = new JPanel(); 
JButton but = new JButton(); 
but.addActionListener(new Test(panel1)); 

Und den Konstruktor ändern, dass die Referenz zu verwenden:

JPanel panel; 
public Test(JPanel panel) { 
    this.panel = panel; 
}