GUI Entwicklung - welches Pattern?

Cole

Bekanntes Mitglied
Hallo zusammen,
ich wollte mal fragen welche(s) Pattern ihr für die GUI Entwicklung einsetzt?
Builder Pattern? Factorys? "Komponente extenden" (zB SuperButton extends JButton)? Scheiss-egal-hauptsache-es-klappt? :)

Wo seht ihr die Vor- und Nachteile?

Danke für den Input!

Gruss
 
S

SlaterB

Gast
hey Handwerker, was setzt du alles für schicke Terrassen ein, Nägel, Hämmer, Sägen?
eine GUI ist ein Java-Programm und verwendet potentiell alles, mit selben Vor-/ Nachteilen wie überall anders auch

MVC ist ein Pattern welches man überwiegend nur in GUIs kennt

edit:
bzw. das ist ja gar kein Entwurfsmuster (design pattern), sondern ein Architekturmuster..
Entwurfsmuster ? Wikipedia
Architekturmuster ? Wikipedia
 
Zuletzt bearbeitet von einem Moderator:
M

Marcinek

Gast
In unseren Framework haben wir von jeder benötigten Componente eine MyJButton Componente erstellt.

Diese ist erweitert um bestimmte Interfaces, die das befüllen und auslesen von Daten mittels generischen Ansätzen funktioniert.

Zum Beispiel kannst du eine Combobox mittels KeyValue Objekten, Strings, die KeyValue beschreiben oder Maps befüllen kannst.

Via Reflection können wir auch Felder von Objekten auf diverese Componenten Mappen... Bla bla

Eigentlich sollte man das auf sourceforge hochladen oder so ^^
 

Cole

Bekanntes Mitglied
Genau, es geht mir in erster Linie um Desing patterns.
Ich will einfach mal nur wissen, was ihr so verwendet. Bzw wie ihrs einsetzt.
ZB sagt "man" ja, dass man eine Komponente nur extenden soll, wenn man zusätzliche Funktionialität einbaut, aber nicht um zB nur die Farbe zu ändern.
Wie löst ihr denn solche Fälle? (gut, anderes L+F verwenden ist natürlich eine Möglichkeit, aber das ist hier nicht gemeint).
 
G

Gast2

Gast
Genau, es geht mir in erster Linie um Desing patterns.
Ich will einfach mal nur wissen, was ihr so verwendet. Bzw wie ihrs einsetzt.
ZB sagt "man" ja, dass man eine Komponente nur extenden soll, wenn man zusätzliche Funktionialität einbaut, aber nicht um zB nur die Farbe zu ändern.
Wie löst ihr denn solche Fälle? (gut, anderes L+F verwenden ist natürlich eine Möglichkeit, aber das ist hier nicht gemeint).

Kommt auch auf dein Toolkit an... bei SWT kannst du von KEINEN komponenten erben, da sie nativ sind.

Sonst bietet sich für Widgets eine WidgetFactory an...
 

v Ralle v

Aktives Mitglied
Ich schreibe gerade an einem E-Mail Client und nutze MVC und ich konnte meine Entscheidung nicht besser treffen. Es lässt sich so leicht erweitern: einfach ein neues Action Objekt anlegen, ein neuer Button und das Action Objekt daran binden. Fertig.

Zwar muss man erstmal das Modell umsetzen, aber einmal gemacht, spart man sich massig Zeit. Besonders praktisch: bei Teamarbeit können Mitglieder das Konzept fortsetzen ohne sich viel Gedanken um die Problembehandlung zu machen.

Kann ich nur empfehlen :)
 

Cole

Bekanntes Mitglied
Danke erst mal für den Input.
Werde hier posten wenn ich / wir uns entschieden haben wie wir das umsetzen wollen.
 

Guybrush Threepwood

Top Contributor
Hi Cole,
das hängt vermutlich auch von der Komplexität des Projekts ab. MVC finde ich für kleine Progrämmchen immer ziemlich überdosiert. Für große Sachen kommt man vermutlich nicht drum rum.
 

ARadauer

Top Contributor
MVC finde ich für kleine Progrämmchen immer ziemlich überdosiert
ja stimmt schon, aber das ist OO auch ;-)

Die Frage ist halt dan was ist klein und bleibt das Programm klein?
Ehe du dich versiehst hast du einen 150000 Zeilen Moloch den du nur noch mit der Pinzette anfassen kannst...
 
S

SlaterB

Gast
bei 150.000 Zeilen verwendet man die ersten 1000 auch nicht mehr, zumindest nicht im Originalzustand,
da hat man alles schon 3x neu organisiert..

also ich zumindest, mag sein dass andere das sofort richtig hinbekommen ;)
 

KSG9|sebastian

Top Contributor
welchen Sinn soll es haben zuerst die Design/ArchitekturPatterns auszuwählen um diese dann in die Anwendung zu pressen?

Wenn man gute Software entwickelt dann ergeben sich die DesignPatterns.

Implementiere ich die Anwendung mit vernünftiger Trennung zwischen UI/Model/Logik dann habe ich damit implizit schon eine Art MVC implementiert. Ob das nun MVC mittels Observer/Observable oder sonstwas ist macht keinen Unterschied.

Von eigenen UI-Toolkits halte ich gar nix. Meistens sind die Dinger nur dafür da um z.B. Daten besser an Controls binden zu können.

Oftmals wird sowas abgefackelt mittels irgendwelchen Interfaces..z.B:

Code:
public interface HasValue<T>{
   public T getValue();
   public void setValue(T value);
}
public interface HasMultipleValues<T>{
   public Collection<? extends T> getItems();
   public void setItems(Collection<? extends T> items);
}


class MyTextField implements HasValue<String>{...}
class MyCombo<T> implements HasValue<T>, HasMultipleValues<T>{...}


Finde ich nicht übermäßig schon und vor allem sehr wartungsintensiv.
Besser ist meiner Meinung nach diese Logik auszulagern in ein Bindingframework welches für verschiedene Komponenten weiß was es zu tun hat.

Code:
class ComboBoxBinding{
   // weiß wie es die Daten in eine Combobox bekommt
   // und auch wieder Daten zurückliefern kann
}

class MyApp{
   MyModel model = new MyModel();
   model.setPersonen(getPersonen());
   UI myUI = new MyUI();

   BindingHelper.addBinding(model, "personen", myUI, "comboPersonen.items");
}

class BindingHelper{
 
   public void addBinding(Object source, String sourcePath, Object target, String targetPath){
        ...
   }
}

BeansBinding macht das genau so. Größter Vorteil ist das die Bindings unabhängig von der UILibrary sind. Man kann auch von Swing auf SWT ändern oder das BindingFramework z.B. im Web verwenden.
Koppelt man die Logik an den UIToolkit muss man für jedes Framework (Swing, SWT, AWT, GWT...) eine Abstraktion schreiben - was in vielen Fällen gar nicht geht - siehe SWT und Vererbung (geht zwar aber sollte man unterlassen).


Ansonsten wüsste ich nicht was ich z.B. mit einem Factorypattern in der UI tun sollte?
 
G

Gast2

Gast
Ansonsten wüsste ich nicht was ich z.B. mit einem Factorypattern in der UI tun sollte?

Default werte schon vorher zu implementieren und nicht jedes mal den gleichen Code zu haben...
z.b. farben, layout sachen usw.
Wie gesagt kommt aufs Toolkit an, gibt viele sinnvolle sachen.

Außerdem gibts es sehr wohl Berechtigungen für eigene Textfelder z.B. wenn man ein Bild im Textfeld haben will oder immer gleiche Suchfunktionen.

Sobald man das Widget mehrmals verwendet, sollte man sich etwas überlegen wie man es einfach wiederverwenden kann. Ob dann über Vererbung, Beziehung, Eigene Komponente usw. muss dann abgewägt werden.
 

Cole

Bekanntes Mitglied
Ich versuch mal ein konkretes Beispiel zu machen:
Ein Button soll eine gewisse Farbe haben und eine definierte Grösse.

Sag ich dann:

Code:
public class MyButton extends JButton {

    public MyButton() {
        setSize(10, 10);
        setBackground(Color.BLUE);
    }

}

und dann der Aufruf

Code:
Button save = new MyButton();
Button cancel = new MyButton();

oder lieber eine FactoryMethode kreariren:
Code:
    public JButton createMyButton() {
        JButton b = new JButton();
        b.setSize(10, 10);
        b.setBackground(Color.BLUE);
        return b;
    }

und dann als Aufruf:

Code:
Button save = createMyButton();
Button cancel = createMyButton();

(ist nur auf die schnelle zusammen geschrieben, Sachen wie ne Beschriftung wären n och von Vorteil...)

Das hat ja primär nichts mit MVC oder nicht zu tun, sondern mit der Erzeugung von GUI - Bestandteilen.
 
S

SlaterB

Gast
nicht mal mit GUI obwohl es da natürlich häufig vorkommt, da viel zu konfigurieren ist,

statische Methoden sind besser wenn möglich, wenn nicht zu voll
 
J

JohannisderKaeufer

Gast
Den Einsatz von einem Builder, kann auch recht interessant sein.

Java:
class ButtonBuilder{
  Color background = null;
  public ButtonBuilder setBackground(Color color){
    background = color;
    return this;
  }
}

//dann per Vererbung oder Factory

class MyButton extends JButton{
  public MyButton(ButtonBuilder builder){
    if(builder.background!=null){
      this.setBackground(builder.background);
    }
  }
}

public static JButton createButton(ButtonBuilder builder){
  JButton button = new JButton();
  if(builder.background!=null){
    button.setBackground(builder.background);
  }
  return button;
}

ButtonBuilder builder = new ButtonBuilder().setBackground(Color.BLUE).setBackground(Color.BLACK);

JButton save = createButton(builder);
JButton cancel = createButton(builder);

Das erinnert mich irgendwie an das GridBagLayout und die Verwendung von GridbagConstraints (Builder) der beim Hinzufügen von Komponenten immer mitgegeben wird.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S GUI Entwicklung: GUI Builder oder doch lieber händisch? AWT, Swing, JavaFX & SWT 17
H 8 Goldenen Regeln zur GUI-Entwicklung AWT, Swing, JavaFX & SWT 2
R Plugin Entwicklung für Java Programme AWT, Swing, JavaFX & SWT 3
T Komplexe GUI Entwicklung AWT, Swing, JavaFX & SWT 6
berserkerdq2 Wie greife ich auf ein Element zu, welches ich beim Scenebuilder erstellt habe AWT, Swing, JavaFX & SWT 10
S Welches Java Layout sollte ich verwenden? AWT, Swing, JavaFX & SWT 3
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
K Fenster welches den Sieger anzeigt AWT, Swing, JavaFX & SWT 5
ImperatorMing JavaFX Übersicht - Welches Element kann welches Erreignis AWT, Swing, JavaFX & SWT 3
Thallius Wer oder was bestimmt welches Frame toFront kommt wenn ein anderes geschlossen wird? AWT, Swing, JavaFX & SWT 8
Soloeco LayoutManager Wie und welches Layout nutze ich am Besten? AWT, Swing, JavaFX & SWT 13
M Java FX Welches Accordion Tilded Pane geöffnet? AWT, Swing, JavaFX & SWT 4
B Hilfe welches Layout brauch ich AWT, Swing, JavaFX & SWT 4
M Welches Pattern bei GUI Anwendungen? AWT, Swing, JavaFX & SWT 2
S Größe von Panel verändern welches auf anderem Panel sitzt AWT, Swing, JavaFX & SWT 10
F Welches GUI Plugin bzw. IDE für schnelle und gute Lösungen AWT, Swing, JavaFX & SWT 7
K 2D-Grafik BufferedImage eingelesen, welches Modell?! AWT, Swing, JavaFX & SWT 2
C [GUI] Welches GUI? AWT, Swing, JavaFX & SWT 28
G LayoutManager Layout welches von Links nach rechts anordnet mit TOP Alignment! AWT, Swing, JavaFX & SWT 5
F Timer welches JPanel aktualisiert AWT, Swing, JavaFX & SWT 6
E Layout, aber welches? AWT, Swing, JavaFX & SWT 8
N Bilder aus Infos generieren lassen. Welches Framework? AWT, Swing, JavaFX & SWT 8
L Welches Layout? AWT, Swing, JavaFX & SWT 6
S Welches Event beim ändern einer Zelle in einer JTable AWT, Swing, JavaFX & SWT 4
S Welches Event beim auswählen einer Zelle? [JTable] AWT, Swing, JavaFX & SWT 3
GilbertGrape Wie Panel anordnen? Welches Layout? AWT, Swing, JavaFX & SWT 7
J welches Layout? AWT, Swing, JavaFX & SWT 8
A welches programm? AWT, Swing, JavaFX & SWT 17
D Welches Layout für prozentuale Aufteilung: 20% - 60 % - 20% AWT, Swing, JavaFX & SWT 3
G welches Layout sollte ich benutzen? AWT, Swing, JavaFX & SWT 2
D Wie viele Pixel welches Icon? AWT, Swing, JavaFX & SWT 4
D Welches Layout? AWT, Swing, JavaFX & SWT 2
K welches package muss ich angeben um GUIs zu erstellen? AWT, Swing, JavaFX & SWT 5
D JPanel, welches sich per Button vergrößert(in GridBagLayout) AWT, Swing, JavaFX & SWT 2
A Herausfinden welches Document gesetzt ist AWT, Swing, JavaFX & SWT 4
G Welches L&F gesetzt? AWT, Swing, JavaFX & SWT 12
T mousemoved abfrage - aber welches event wenn maus weg? AWT, Swing, JavaFX & SWT 2
lin Welches Objekt für einen About-Dialog verwenden? AWT, Swing, JavaFX & SWT 2
V Welches Event wird von einer JTabbedPane gefeuert? AWT, Swing, JavaFX & SWT 2
B 3 Zeilen die unterschiedlich gross sind -->Welches Layout AWT, Swing, JavaFX & SWT 3
R Welches Layout? AWT, Swing, JavaFX & SWT 4
W welches Layout? AWT, Swing, JavaFX & SWT 3
C Welches Toolkit für GUI AWT, Swing, JavaFX & SWT 2
O Welches Layout ? AWT, Swing, JavaFX & SWT 5
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
B JavaFX Pattern (Aufteilung Zuständigkeiten AWT, Swing, JavaFX & SWT 7
M Swing MVC-Pattern - View mit mehreren Models AWT, Swing, JavaFX & SWT 5
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Cromewell JavaFX MVC-Pattern AWT, Swing, JavaFX & SWT 7
L JavaFX Java FX Anwendung nach MVC mit Observer Pattern AWT, Swing, JavaFX & SWT 15
3 2D-Grafik BasicStroke dash pattern - Linie zu lang!? AWT, Swing, JavaFX & SWT 1
lumo SWT Image Pattern AWT, Swing, JavaFX & SWT 5
M Swing MVC Pattern verstanden, aber Probleme bei der Umsetzung AWT, Swing, JavaFX & SWT 5
J Swing Controller im MVC-Pattern AWT, Swing, JavaFX & SWT 9
G Hilfe! Command Pattern an easy ImageViewer? AWT, Swing, JavaFX & SWT 13
D Wie mehrere Grafiken auf JPanel anzeigen lassen? (Observer pattern?) AWT, Swing, JavaFX & SWT 24
D MVC Pattern in Swing-Applikationen AWT, Swing, JavaFX & SWT 4
hdi Observer-Pattern bei JPanel nicht möglich? AWT, Swing, JavaFX & SWT 7
A MVC-Pattern - Kreuzweise Anwendung? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben