eigene Methoden für Buttons?

rorton

Mitglied
im unterricht haben wir gehört es sei sinnvoll, für die erzeugung von buttons eigene methoden für die erstellung zu schreiben!
ist das wirklich praxisnahe?
was ist wenn ich 30 buttons habe, dann müßte ich für jeden button eine eigene methode schreiben.. zumindest wenn es nach unserem lehrer geht!

was sagt ihr dazu?
 

XHelp

Top Contributor
Naja, wenn du 30 Buttons auf einem Frame hast, dann hast du meist eh was falsch gemacht :)
Vermutlich meint der Lehrer etwas ähnliches wie:
Java:
class MyFrame extends JFrame {
  public MyFrame() {
    super("Frame");
    initGui();
  }
  private void initGui() {
    //in dieser Methode eben alles Initialisieren und auf dein Frame packen
  }
}
 

rorton

Mitglied
nö, di init-methode meine ich nicht..

schaut eher so aus:

Java:
public JButton getButton_ok() {
     if (ok_button == null) {
           ok_button = new JButton("OK");
     }
     return ok_button;
}

Bei unserem Beispiel hatten wir 5 Buttons, die wir alle mit dieser Methode erzeugt und zum frame hinzugefügt haben..
das ganze auch mit Labels, TextFields..

ja, 30 buttons sind vielleicht etwas übertrieben, aber ingesamt 30 komponenten auf einem frame ist wohl eher nicht so ungewöhnlich, zb. bei einem formular, oder? wie würdest du das machen?
 

XHelp

Top Contributor
Aso. Ja, sowas habe ich schon mal gesehen, vor allem in den GUIs die mit einem Builder erstellt wurden. Aber ich persönlich habe es nie verwendet. (zumal ich auch nicht oft GUIs baue)
 

Marco13

Top Contributor
Als pauschale Regel ist das ... zu pauschal :D Das, was du da al Beispiel geschrieben hast, mit dem "if (ok_button == null)" kommt wirklich eher von GUI-Buildern: Dort wird oft so eine Methode erstellt, die dann überall in dem Stil verwendet wird
Code:
getOKButton().setEnabled(true);
getOKButton().setBackground(Color.GREEN);
...
Dabei ersetzt die Methode praktisch die Instanzvariable. Das finde ich auch eher unschön...

Aber grundsätzlich kann es schon sinnvoll sein, das Erstellen von Buttons in eine Methode auszulagern. Z.B. wenn man in der Methode noch irgendwelche Initialisierungen des Buttons macht, oder insbesondere, wenn man auch noch gleich einen anonymen Listener an den Button hängt:
Java:
private JButton createOKButton()
{
    JButton button = new JButton("OK");
    button.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            okPressed();
        }
    });
    button.setEnabled(false);
    button.setBackground(Color.YELLOW);
    ....
    return button;
}


Dann in der init-Metode sowas zu haben wie
Code:
somePanel.add(createOKButton());
somePanel.add(createCancelButton());
somePanel.add(createRetryButton());
somePanel.add(createIgnoreButton());
ist schon übersichtlicher, als wenn dort alles "inline" steht. Aber das ist der Punkt: Wenn der Code dadurch übersichtlicher wird, kann man das schon machen.
 

Antoras

Top Contributor
Ja, ich würde empfehlen das so zu machen. Der Grund ist, dass du so einfach einzelne Komponenten deaktivieren und die Komponentenhierarchie einfach überblicken kannst. Und dabei entstehen schon mal Klassen mit 1000+ Zeilen Code, das kann man nun mal nicht ändern.

Den kompletten Code in eine Methode zu schreiben bringt dir gar nichts, da er nicht wesentlich kürzer wird und ohne GUI-Builder praktisch nicht mehr zu warten ist.
 

rorton

Mitglied
so ist das,verstehe! Danke euch für die ausführliche beschreibung!
das ganze macht dann von der übersichtlichkeit her schon sinn, auch wenn die lines of code etwas ansteigen! :D

edit: könnt ihr mir einen tipp geben, wie ich so ein formular am besten hinbekomme... GroupLayout? oder mit mehreren Panels und BoxLayout, GridLayout und co.. ich weiß schon, es gibt keine Musterlösung, aber ein denkanstoß wäre sehr hilfreich!
 
Zuletzt bearbeitet:

slawaweis

Bekanntes Mitglied
schaut eher so aus:

Java:
public JButton getButton_ok() {
     if (ok_button == null) {
           ok_button = new JButton("OK");
     }
     return ok_button;
}

Bei unserem Beispiel hatten wir 5 Buttons, die wir alle mit dieser Methode erzeugt und zum frame hinzugefügt haben..
das ganze auch mit Labels, TextFields..

ja, 30 buttons sind vielleicht etwas übertrieben, aber ingesamt 30 komponenten auf einem frame ist wohl eher nicht so ungewöhnlich, zb. bei einem formular, oder? wie würdest du das machen?
es ist das Lazy-Creation-Pattern, d.h. ein Objekt wird erst dann erzeugt, wenn es benötigt wird. Es ist ein nützliches Pattern, aber meiner Meinung nach nicht an dieser Stelle. Ich arbeite eher mit dem Factory-Pattern. Hierbei ist der Vorteil, dass die gesamte Logik einer konkreten (Teil-)GUI an einer Stelle zu finden ist (und nicht über die Java-Datei verteilt ist), aber die reine Konstruktion von Objekten ausgelagert wird. Beispiel für Logik:

Java:
UIFactory.createButton(new Action(){
// ...
});
UIFactory.createButton("name1", "Title", new ActionListener() {
// ...
});
UIFactory.createButton("name2", "Title", "actionCommand");
UIFactory.createButton("name3", "Title", icon);
UIFactory.createButton("name4", "Title", icon, Color.white, Color.black); // Hintergrund, Vordergrund

der erste Parameter ist übrigens die ID einer Komponenten, die man über getName() bekommen kann. Diese Funktionalität war von Anfang an drin, wird aber kaum genutzt. Doch die ist sehr nützlich. Man kann sich so spezielle universelle Methoden zulegen, mit welchen man Komponenten aus einer GUI bekommt, ohne sich Klassenvariablen für jede Komponente anzulegen. Dann kann man solche schönen Sachen schreiben:

Java:
ContainerUtils.getAs(frame, "name4", JButton.class).setEnabled(true);

Slawa
 
Zuletzt bearbeitet:

Antoras

Top Contributor
Das Factory-Pattern in GUIs einzusetzen hat mich noch nicht so richtig überzeugt.

Java:
UIFactory.createButton("name1", "Title", new ActionListener() {
// ...
});
Was wenn du dem Button hier neben dem Action- noch einen Focus- und MouseListener hinzufügen möchtest? Das ist doch nicht mehr übersichtlich. Zumal es ja noch hundert andere Sachen gibt mit denen man seine Komponenten dekorieren möchte. Ich will mir doch nicht die Position von jedem Parameter merken...

Und wie merkt man sich die Namen der Komponenten? Da ich den mehrmals benötige (beim Erstellen, Aufrufen, Konfigurieren...) müssten Konstanten angelegt werden. Ansonsten wäre das nicht mehr wartbar. Und dann gäbe es wieder keinen Vorteil, da Klassenvariablen durch Konstanten ausgetauscht werden würden.

Den Vorteil zusammengehörenden Code an einer Stelle wiederzufinden ist mit lazy creation auch gegeben. Die Methode zur Erzeugung der Komponente wird im besten Fall genau einmal aufgerufen - nämlich in der add-Methode der darunterliegenden Komponente.
 
G

Gast2

Gast
Also ich benutze auch eine WidgetFactory für einige Komponenten damit der initial Wert wie Highlighter, Farben, StandardAction gleich gefüllt wird. So dass die gleichen Komponenten ein einheitliches Verhalten haben.
Aber dabei wird die Instanz zurückgeliefert, so dass man einfach noch zusätzlich benötigte Listener anfügen kann.

Als Layout würde ich das JGoodies FormLayout runterladen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P X extends TreeView - eigene Methoden AWT, Swing, JavaFX & SWT 5
B Eigene Methoden in TABs einfügen AWT, Swing, JavaFX & SWT 8
M eigene GUI Bibliothek erstellen. AWT, Swing, JavaFX & SWT 10
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
H MouseAdapter Klasse nutzen wenn eigene Klasse bereits von anderer erbt AWT, Swing, JavaFX & SWT 13
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
L JavaFX Eigene Font benutzen AWT, Swing, JavaFX & SWT 6
B Notepad++ in die eigene GUI einbinden AWT, Swing, JavaFX & SWT 7
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
M Eigene Klasse mit Grafikobjekten schreiben AWT, Swing, JavaFX & SWT 4
S JavaFX Drehen um eigene Achse AWT, Swing, JavaFX & SWT 2
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
L Eigene Component anordnen AWT, Swing, JavaFX & SWT 7
L JavaFX Eigene JavaFX Controls anlegen AWT, Swing, JavaFX & SWT 1
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
G Event Handling Event Handling in eigene Klasse AWT, Swing, JavaFX & SWT 4
L Eigene JComponent in GridLayout AWT, Swing, JavaFX & SWT 9
A JavaFX Scene Builder eigene Klasse hinzufügen AWT, Swing, JavaFX & SWT 2
L Swing Wie programmiere ich eine eigene GUI? AWT, Swing, JavaFX & SWT 12
T Swing Eigene Konsole AWT, Swing, JavaFX & SWT 5
D Swing Eigene Tabelle AWT, Swing, JavaFX & SWT 18
M eigene horizontale Scrollbar AWT, Swing, JavaFX & SWT 1
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
J JavaFX Eigene ListCell Problem(Objekte werden doppelt angezeigt) AWT, Swing, JavaFX & SWT 1
C Swing MenuBar als eigene Klasse AWT, Swing, JavaFX & SWT 4
A Swing Eigene JComponent Scrollable AWT, Swing, JavaFX & SWT 6
Kenan89 3D Models aus anderen Spielen in eigene einfügen AWT, Swing, JavaFX & SWT 3
R SWT Eigene Events erstellen und werfen AWT, Swing, JavaFX & SWT 59
P Eigene CMD GUI zum Starten von JAR AWT, Swing, JavaFX & SWT 10
M Swing eigene Dialoge, aber wie genau? AWT, Swing, JavaFX & SWT 5
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
P Swing Alle Zeilen einer Spalte (jTable) zusammen zählen und in eine eigene Zeile das Ergebnis schreiben. AWT, Swing, JavaFX & SWT 7
K 3D-Grafik Eigene "Kamera" AWT, Swing, JavaFX & SWT 2
T eigene Klasse für Panel AWT, Swing, JavaFX & SWT 9
S Swing Eigene Komponente (JPanel) soll ChangeEvents verteilen AWT, Swing, JavaFX & SWT 12
E LookAndFeel Eigene Komponenten mit Synth L&F stylen AWT, Swing, JavaFX & SWT 2
alderwaran Swing XML editor plugin für eigene anwendung AWT, Swing, JavaFX & SWT 2
P Swing Eigene Komponente Entwickeln - erben von JComponent oder JPanel? AWT, Swing, JavaFX & SWT 5
H Swing Eigene Komponente wird nur halb oder komisch angezeigt AWT, Swing, JavaFX & SWT 3
H Swing Eigene Komponente reagiert falsch auf mouseClicked() AWT, Swing, JavaFX & SWT 5
T Eigene JComponent AWT, Swing, JavaFX & SWT 4
L Eigene Design Oberfläche erstellen AWT, Swing, JavaFX & SWT 3
1 Eigene Component in JScrollBar + fixe Linien??? AWT, Swing, JavaFX & SWT 2
T SWT eigene Komponenten AWT, Swing, JavaFX & SWT 2
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18
A Eigene StatusBar AWT, Swing, JavaFX & SWT 2
1 Eigene JComponent mit MouseListener versehen AWT, Swing, JavaFX & SWT 10
S Eigene GUI Elemente erstellen AWT, Swing, JavaFX & SWT 6
D Eigene Methode soll Gerade zeichnen AWT, Swing, JavaFX & SWT 5
D Swing Eigene Komponente mit JSpinner AWT, Swing, JavaFX & SWT 4
MrMilti eigene Klasse in JTable ablegen AWT, Swing, JavaFX & SWT 12
R Swing JTable: Eigene Zeichnung im Header AWT, Swing, JavaFX & SWT 11
A Eigene Border für Buttons AWT, Swing, JavaFX & SWT 19
A Eigene Buttons AWT, Swing, JavaFX & SWT 20
C JTextPane HTML und eigene Tags AWT, Swing, JavaFX & SWT 10
S Eigene GUI (evt. Toolkit) AWT, Swing, JavaFX & SWT 10
M SWT: eigene Events AWT, Swing, JavaFX & SWT 9
& eigene Schriftart in JEditorpane AWT, Swing, JavaFX & SWT 2
T Eigene Fenster kreieren?zb. wie bei Winamp? AWT, Swing, JavaFX & SWT 9
D Eigene Component erstellen? AWT, Swing, JavaFX & SWT 4
F eigene Swing-Komponente. Drehregler AWT, Swing, JavaFX & SWT 4
M Eigene Klasse für mehrer JSplitPanes AWT, Swing, JavaFX & SWT 3
M Eigene Komponenten basteln AWT, Swing, JavaFX & SWT 25
O Eigene GUI Objekte entwerfen? AWT, Swing, JavaFX & SWT 3
A Eigene, sich selbst zeichnende Component AWT, Swing, JavaFX & SWT 5
S Eigene Komponenten AWT, Swing, JavaFX & SWT 2
T Eigene erweiterte MouseEvents nutzen AWT, Swing, JavaFX & SWT 2
M In eigene JPanel Klasse zeichnen AWT, Swing, JavaFX & SWT 4
M CellEditor und CellRenderer für eigene Klasse AWT, Swing, JavaFX & SWT 4
M eigene ComponentUI und Serializable AWT, Swing, JavaFX & SWT 3
E Eigene Steuerelemente bauen AWT, Swing, JavaFX & SWT 3
H eigene paintComponent(Graphics) kommt mit rezise nicht klar AWT, Swing, JavaFX & SWT 6
G fullscreen GUI - eigene components? AWT, Swing, JavaFX & SWT 2
T 4 db tabellen in einem karteireiter eigene klasse für die me AWT, Swing, JavaFX & SWT 7
S SWT Für jede gui komponente eigene methode AWT, Swing, JavaFX & SWT 2
J Eigene Fehlermeldung in AWT erzeugen AWT, Swing, JavaFX & SWT 2
D eigene SwingKonsole. AWT, Swing, JavaFX & SWT 5
I Eigene JComboBox AWT, Swing, JavaFX & SWT 10
C UIDefaults für eigene Klasse anpassen AWT, Swing, JavaFX & SWT 3
C ISelectionProvider und eigene Selections AWT, Swing, JavaFX & SWT 2
M kann man auch eigene look and feels machen? AWT, Swing, JavaFX & SWT 2
L eigene Komponente, ActionEvent senden? AWT, Swing, JavaFX & SWT 3
E Beim Schließen des Fensters eigene Funktion aufrufen AWT, Swing, JavaFX & SWT 8
M JTable mit JCombobox eigene Auswahl pro Zeile ? AWT, Swing, JavaFX & SWT 3
T JFrame - eigene Titelleiste AWT, Swing, JavaFX & SWT 8
Y Eigene Komponente einfügen AWT, Swing, JavaFX & SWT 6
G Eigene Koponente erstellen AWT, Swing, JavaFX & SWT 3
G Eigene Componente in jScrollView einbetten AWT, Swing, JavaFX & SWT 6
T Eigene grafische Oberfläche AWT, Swing, JavaFX & SWT 7
U was bewirkt die methode fill und unterschied zu anderen fill Methoden in 2dgraphics? (Java)? AWT, Swing, JavaFX & SWT 6
G JavaFX Verständnisfrage mit parametrisierten Methoden und FXML AWT, Swing, JavaFX & SWT 21
J Genutzte Methoden in einen Frame einbauen AWT, Swing, JavaFX & SWT 21
xYurisha ActionListener Methoden Buttons zuweisen! AWT, Swing, JavaFX & SWT 16

Ähnliche Java Themen

Neue Themen


Oben