jButton und Actionlistener?

Status
Nicht offen für weitere Antworten.

Andreas1989

Aktives Mitglied
Hallo zusammen,
ich habe in meinem Frame mehrere Button, die alle gleich aussehen. Da sich nur ein paar Dinge unterscheiden, z.B. wie die Position hab ich mir eine Methode geschrieben um Buttons zu erstellen.
Button Methode
Code:
public void setButton(JMyButton tempButton, int panel, int x, int a, String tempString, ImageIcon tempIcon)
  {
    x=2*abstandButton+((x-1)*a)+((x-1)*abstandButton); // Berechnung x
    tempButton.setBounds(x, abstandButton, a, a);
    tempButton.setText(tempString);
    tempButton.setFocusPainted(false);
    tempButton.setBackground(cDefault);
    tempButton.setContentAreaFilled(false);
    tempButton.setBorder(buttonBorder);
    tempButton.setIcon(tempIcon);
    tempButton.setForeground(Color.WHITE);
    tempButton.setHorizontalTextPosition(SwingConstants.CENTER);
    tempButton.setVerticalTextPosition(SwingConstants.BOTTOM);   
    switch (panel) {
      case  1:                      // Panel  Select
        jPSelect.add(tempButton);
        break;
      case  2:                      // Panel Edit
        jPEdit.add(tempButton);
        break;
      case  3:                      // Panel Info
        jPInfo.add(tempButton);
        break;
      default:                      // Panel Main
        jPMain.add(tempButton);
    }

  }
So erstelle ich mir einen neuen Button
Code:
setButton(jBRefresh, 1, 1, aButton, "Refresh", iRefresh);
Soweit funktioniert dass alles super. Wie weise ich jetzt jedem Button einen eigenen Action Listener?? Was geht, aber sicherlich nicht schön ist, nach jedem aufruf der setButton Methode dem eben angelegtem Button einen Listener hinzufügen
Code:
setButton(jBRefresh, 1, 1, aButton, "Refresh", iRefresh);
jBRefresh.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jBRefresh_ActionPerformed(evt);
      }
    });
Gibt es da noch einen besseren schöneren weg?

Gruß Andreas
 
EDIT: Sorry, unfug:

Die Methode sollte ggf. "createButton" heißen, und den erstellten Button zurückliefern.
JButton b = createButton(....);
b.addActionListener(...);

EDIT: ... der Button wird da ja garnicht erstellt. Dann ist die Möglichkeit, die du beschrieben hast, doch OK!?
 
die ganze methode ist unschön...

mach dir lieber ne Methode eigene Klasse zum gleiche Buttons zu erstellen und geb eine Referenz darauf zurück
so in der art pseudo code
[HIGHLIGHT="Java"]

public static JButton createButton(String text, ImageIcon, ActionListener a usw.)
{
JButton button = new JButton();
button .setText(tempString);
button .setFocusPainted(false);
button .addActionListener(a);
// usw.

return button;
}

public static JButton createButton(String text, ImageIconusw.)
{
JButton button = new JButton();
button .setText(tempString);
button .setFocusPainted(false);
// usw.

return button;
}

[/HIGHLIGHT]

Und dann erzeuge deine Buttons in den entsprechnden Panels und adde Sie und benutze ein LayoutManager, ist bestimmt besser als deine Berechnungen!!!
Kannst ja mehere Methode anbieten einmal mit ActionListener einmal ohne usw.
 
Zuletzt bearbeitet von einem Moderator:
Hallo,
vielen Dank!
Auch ne gute Idee einen Layout Manager zu verwenden. Bis jetzt habe ich noch nichts mit dem layout Manager gemacht - hab aber schon nen paar Samples gefunden. Deswegen hab ich mir bis jetzt auch noch den x bzw. den y Punkt berechnen müssen, ich wollte es ja "ein wenig" dynamisch 😉.
 
Hallo,
vielen Dank!
Auch ne gute Idee einen Layout Manager zu verwenden. Bis jetzt habe ich noch nichts mit dem layout Manager gemacht - hab aber schon nen paar Samples gefunden. Deswegen hab ich mir bis jetzt auch noch den x bzw. den y Punkt berechnen müssen, ich wollte es ja "ein wenig" dynamisch 😉.

dynamisch??????
dafür ist der Manager ja da 😉
 
Hallo,
mit dynamisch meine ich, dass ich anhand von Klassen Variablen die Größe(Höhe und Breite) den Abstand nach oben links oder zum nächsten Button festlegen kann. Ich muss also nur die Variablen am anfang ändern und meine Buttons ändern die Position. Ist schon mal besser wie einmal ein Layout zeichnen und wirklich bei jedem Button exakte x, y, width und height Punkte anzu geben.
Ich denke auch, dass das ganze mit einem Layout Manager viel besser geht. Aber wie gesagt hab noch nicht so viel Erfahrung mit Swing. Kannte bis heute die Funktion von nem Layout Manager noch nicht. Werd ich mir jetzt aber sicher auch noch ansehen.

Gruß
Andreas
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben