Prüfen ob es Variable mit Namen gibt der als String übergeben wird

P

phip1611

Gast
Hallo liebe Forenmitglieder,

Ich habe zwei Klassen, eine für die GUI (von NetBeans erzeugt) und eine für die Programm-Logik. In der GUI-Klasse habe ich aktuell eine Methode setButtonEventListener(ActionListener al)i, damit ich von außen steuern kann was gerade bei einem Button-Klick geschehen soll. Das ganze geht allerdings nur, wenn ich zuvor in der GUI-Klasse eine Methode für den entsprechenden Button erstelle um von außen darauf Einfluss nehmen zu können.

Ich dachte evtl an eine Methode bei der ich mit einem weiteren Parameter angebe für welchen Button das ganze aktuell gerade gelten soll in folgender Art:
Java:
public void setEventListener(ActionListener al, String guiElement) {

/* wenn es eine Variable (z.b. Button mit dem Name {guiElement} gibt, soll dieses Objekt angesprochen werden und den ActionListener zugewiesen bekommen */
}

Versteht ihr was ich meine? Und ist das sinnvoll? Wäre eben schön dynamisch, so muss ich nicht für jedes Grafik-Element einzeln diese Methoden schreiben
 

InfectedBytes

Top Contributor
Mit Reflection geht das schon, sofern die Buttons Member des Objects sind, ist aber vielleicht nicht unbedingt ratsam.
Und soviel bringt es in diesem Fall nicht.
Ob du nun btnXYZ.addActionListener(al) oder setEventListener(al, "btnXYZ") benutzt, macht doch im Grunde keinen großen unterschied.
 
P

phip1611

Gast
Ich könnte das ganze doch auch managen, wenn alle Buttons in einem Enum registriert sind, nicht wahr? Dann kann ich ja übergeben für welchen Eintrag ein Event-Listener sein soll?
 
P

phip1611

Gast
Ich habe es jetzt mit Enums gemanaged, ist ganz cool. Was meint ihr dazu?
Das Ganze baut nun auf folgendes Konstrukt auf, mir gefällt das ganz gut:

Java:
gui.addEventListener(
                GUI.Buttons.EXIT_BUTTON,
                new GUI.ShutDownActionListener()
        );

------------------
Java:
package de.phip1611.playground;

public class JavaTest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        new JavaTest();
    }
  
    public JavaTest() {
        GUI gui = new GUI();
        gui.buildGui();
        gui.addEventListener(
                GUI.Buttons.EXIT_BUTTON,
                new GUI.ShutDownActionListener()
        );
        gui.addEventListener(
                GUI.Buttons.EXE_BUTTON,
                new GUI.ExeActionListener()
        );
        gui.showGui();
    }
}


Java:
package de.phip1611.playground;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GUI {
  
    private final JFrame frame;
    private final JPanel panel;
  
    public GUI() {
        this.frame = new JFrame();
        this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.panel = new JPanel();
    }
  
    public void buildGui() {
        for (Buttons button : Buttons.values()) {
            this.panel.add(button.getButton());
        }
        this.frame.add(this.panel);
        this.frame.pack();
    }
  
    public void showGui() {
        this.frame.setVisible(true);
    }
  
    public void addEventListener(Buttons button, ActionListener al) {
        GUI.Buttons.valueOf(button.toString()).addEventListener(al);
    }
  
    public enum Buttons {      
        EXE_BUTTON() {
            JButton button = new JButton("Aktion ausführen!");

            @Override
            protected void addEventListener(ActionListener al) {
                this.button.addActionListener(al);
            }
          
            @Override
            protected JButton getButton() {
                return this.button;
            }
        },
        EXIT_BUTTON() {
            JButton button = new JButton("Programm beenden!");

            @Override
            protected void addEventListener(ActionListener al) {
                this.button.addActionListener(al);
            }
          
            @Override
            protected JButton getButton() {
                return this.button;
            }
        };
      
        protected abstract void addEventListener(ActionListener al);
        protected abstract JButton getButton();
    }
  
    public static class ShutDownActionListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.exit(0);
        }
    }
  
    public static class ExeActionListener implements ActionListener {
        JLabel label = new JLabel("Glückwunsch, du hast den Button erfolgreich gedrückt! :D");
      
        @Override
        public void actionPerformed(ActionEvent e) {
            JDialog jdialog = new JDialog();
            jdialog.setTitle("Hallo");
            jdialog.add(
              new JPanel().add(
                label
              )
            );
            jdialog.pack();
            jdialog.setVisible(true);
          
        }
    }
}
 

InfectedBytes

Top Contributor
Ich empfinde die Lösung als unsinnig. Klar, es geht und ist sogar halbwegs übersichtlich.
Aber in Bezug zur Wartbarkeit etc. ist es halt eher schlecht und allgemein das Design, Buttons (welche nur für einen JFrame gedacht sind) global zugreifbar zu machen ist eine eher schlechte Idee.

Und denk nochmal über diese Zeile nach:
GUI.Buttons.valueOf(button.toString()).addEventListener(al);
Du erhälst ein Objekt vom Typ Buttons. wandelst das dann in einen String um, nur um über valueOf den das zu dem String passende Buttons Objekt zu bekommen. Was logischerweise das gleiche ist, wie du bereits übergeben bekommen hast... button.addEventListener(al);
 
P

phip1611

Gast
Ich finde das Ganze steigt die Wartbarkeit extrem.. So kann ich schnell neue ActionListener hinzufügen die verschiedene Aufgaben lösen etc. Außerdem habe ich gar keinen globalen Zugriff weil ich weiß man soll das nicht machen. Ich finde diese Methode aber super cool, da ich so schnell von außen angeben kann welches Komponente gemeint ist ohne Zugriff auf diese zu haben.

Habe Zugriff von außen, aber alles was mit Änderungen zu tun hat wird nur von der GUI-Klasse gemacht.
 

InfectedBytes

Top Contributor
Natürlich hast du globalen Zugriff: Buttons.EXE_BUTTON.getButton();
Du kannst also von jeder Klasse (im selben package) aus den Text des Buttons etc. verändern.
 
P

phip1611

Gast
Ach so meinst du das. Stimtm, Entschuldigung :( Dann ändere ich die Methode einfach und mache sie private
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Variablen Originalname einer übergebenen Variable prüfen Allgemeine Java-Themen 9
M Prüfen ob Variable vorhanden / initalisiert ist Allgemeine Java-Themen 4
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
OnDemand Prüfen ob Bild defekt ist Allgemeine Java-Themen 4
N Prüfen, ob ein String 2x das selbe Zeichen hat Allgemeine Java-Themen 10
W Classpath Reflexion - Prüfen ob man auf ein Feld ändern kann Allgemeine Java-Themen 2
OnDemand Bild prüfen ob defekt Allgemeine Java-Themen 3
B Java Mail: Prüfen, ob Email hat ein Anhang oder nicht Allgemeine Java-Themen 2
Bluedaishi Prüfen ob Datei noch geöffnet ist Allgemeine Java-Themen 59
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
J Mit Lombok Integer Range prüfen Allgemeine Java-Themen 6
S Prüfen ob Textfile existiert Allgemeine Java-Themen 9
E Programm auf Installation prüfen Allgemeine Java-Themen 1
S Binärbaum prüfen Allgemeine Java-Themen 0
L String auf zahlenwert prüfen Allgemeine Java-Themen 13
W Datum prüfen + zweistellig Allgemeine Java-Themen 11
perlenfischer1984 Functionsparameter prüfen und eine Exception werfen !? Allgemeine Java-Themen 11
Z Java Exceptions - Auf leeres Feld prüfen Allgemeine Java-Themen 10
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
M .jar nach Datei prüfen Allgemeine Java-Themen 2
B Existenz eines Files max 30 sec prüfen Allgemeine Java-Themen 5
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
F Cardlayout prüfen ob schon vorhanden, keine doppelten Allgemeine Java-Themen 3
turmaline Regex gegen Regex prüfen Allgemeine Java-Themen 4
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
D ArrayList index auf gültigkeit prüfen Allgemeine Java-Themen 12
C Best Practice [Arrays] Wie sinnvoll prüfen, ob Array primitive Datentypen enthält? Allgemeine Java-Themen 6
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
K Methoden Arrays auf true Werte prüfen Allgemeine Java-Themen 4
Y Prüfen ob ein Graph immer einen von mehren Enden erreicht Allgemeine Java-Themen 4
O Prüfen ob String eine Zahl mit maximal 2 Nachkommastellen ist Allgemeine Java-Themen 4
M datei aufruf prüfen Allgemeine Java-Themen 9
D Best Practice Prüfen ob jar nachträglich geändert wurde Allgemeine Java-Themen 2
B Dateien prüfen auf Gleichheit Allgemeine Java-Themen 5
H String auf Zahlen prüfen Allgemeine Java-Themen 4
T auf Valides Datum prüfen Allgemeine Java-Themen 12
N Java Version Prüfen lassen Allgemeine Java-Themen 11
S Variablen Prüfen ob Number vom Typ Integer, Float, Double, ... ist Allgemeine Java-Themen 2
E selber Klassen kompilieren/ prüfen Allgemeine Java-Themen 5
T Methoden Zahlenpalindrom laufzeitoptimiert prüfen Allgemeine Java-Themen 4
U ResourceBundles auf vollständigkeit prüfen Allgemeine Java-Themen 2
C jollyday: prüfen, ob Datum = Feiertag Allgemeine Java-Themen 8
C Prüfen ob sich ein Punkt innerhalb einer Kugel befindet (Java3D,nicht-lineare GLS) Allgemeine Java-Themen 5
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
E Prüfen ob Fenster mit Namen offen ist Allgemeine Java-Themen 2
M Binärbaum auf vollständigkeit prüfen Allgemeine Java-Themen 4
S Mail Adressen Syntax prüfen Allgemeine Java-Themen 22
O Text mit Wildcard gegen regulären Ausdruck prüfen Allgemeine Java-Themen 3
N List auf null prüfen Allgemeine Java-Themen 2
B generischen Typ prüfen Allgemeine Java-Themen 7
D prüfen, ob Enums bestimmte Elemente enthalten Allgemeine Java-Themen 3
N Prüfen ob Methode ausgeführt wird und diese ggf. abbrechen? Allgemeine Java-Themen 8
B Prüfen ob ein Programm gestartet wurde Allgemeine Java-Themen 23
N ArrayList nach Reihenfolge prüfen Allgemeine Java-Themen 2
C Prüfen auf Zahl und 6 stellig fehlerhaft? warum? Allgemeine Java-Themen 7
D Wie prüfen, ob ein String Teil eines Enum Types ist? Allgemeine Java-Themen 12
H Prüfen, ob doppete Werte in int-Array vorhanden sind Allgemeine Java-Themen 16
data89 Bilder mit Java prüfen - suche dringend Hilfe Allgemeine Java-Themen 8
S Prüfen auf Hex-Wert fester Länge! Allgemeine Java-Themen 5
M Prüfen, welche anderen Programme laufen Allgemeine Java-Themen 5
K Zip dateien prüfen Allgemeine Java-Themen 3
G ZIP Archiv auf Konsistenz prüfen Allgemeine Java-Themen 2
T Parameter einer Klasse auf Interface prüfen Allgemeine Java-Themen 6
L Passwort mit Regulärem Ausdruck prüfen Allgemeine Java-Themen 6
P Sound Buffer prüfen Allgemeine Java-Themen 12
B PrintService - Wie prüfen ob Drucker online ist? Allgemeine Java-Themen 2
A Textfeld prüfen, ob ein Punkt eingegeben wurde Allgemeine Java-Themen 8
flashfactor Prüfen ob bereits eine Instanz gestartet ist Allgemeine Java-Themen 2
C Prüfen, ob eine Methode eine andere überschreibt! WIE? Allgemeine Java-Themen 8
T Prüfen, ob Char ein Quantifier ist Allgemeine Java-Themen 6
N Prüfen ob Objekt in Liste enthalten ist Allgemeine Java-Themen 17
G Prüfen welche JRE-Version gebraucht wird Allgemeine Java-Themen 19
J Mit Patternmatching einen Satz prüfen Allgemeine Java-Themen 12
G Prüfen ob Ziffern einer Zahl pandigital sind? Allgemeine Java-Themen 15
J Wie prüfen ob eine Datei vom OS fertig geschrieben wurde? Allgemeine Java-Themen 6
TheJavaKid Zeile auf existenz von String prüfen. Allgemeine Java-Themen 19
A Weshalb man Parameter auf Gültigkeit prüfen sollte Allgemeine Java-Themen 6
N Prüfen ob ein String in einen Integer umgewandelt werden kan Allgemeine Java-Themen 4
O String auf zahlen prüfen (java 1.3) Allgemeine Java-Themen 4
G Datei Zugriffsrechte prüfen Allgemeine Java-Themen 2
Linad Bilder auf Gleichheit prüfen Allgemeine Java-Themen 6
G ResultSet auf Inhalt prüfen? Allgemeine Java-Themen 2
H Prüfen, ob es sich um ein Integer handelt Allgemeine Java-Themen 4
C String str prüfen Allgemeine Java-Themen 3
H Prüfen ob ein String grösser als 4 Zeichen ist Allgemeine Java-Themen 3
F Prüfen, ob Windows oder UNIX Allgemeine Java-Themen 2
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
J Wo kommt der Wert der Variable her ? Allgemeine Java-Themen 6
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
H lokale Variable bei Optional verwenden Allgemeine Java-Themen 11
A Variable in if initialisieren Allgemeine Java-Themen 23
S Variable als Objekt Name Allgemeine Java-Themen 3
D "Automatisierte", variable verschachtele for-Schleife Allgemeine Java-Themen 9
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
P Variable wird in for - loop nicht richtig hochgezählt Allgemeine Java-Themen 11
A Variablen non-static variable cannot be referenced from a static content Allgemeine Java-Themen 4
A Variable, welche Exeption wirft als "Global" deklarieren Allgemeine Java-Themen 13
A Scanner Variable Klassenimtern deklarieren Allgemeine Java-Themen 12
L Variablen Variable nicht aktualisiert Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben