allg. Frage zur GUI-Architektur

syfds

Mitglied
Hallo an alle,

ich hätte eine grundsätzliche Frage zur Programmierung von Oberflächen in Java. In meinem Programm muss sich der Fensterinhalt immer ändern (als Reaktion auf bestimmte Ereignisse, wie z.B. wenn ein Button gedruckt wird usw.). Ich habe das immer so gemacht, dass ich auf ein JPanel alle benötigten Elemente(Buttons, TextFields usw.) drauf getan habe, und falls ein Ereignis eintritt, das den Panel - Inhalt ändern soll, wurden alle alten Elemente von meinem JPanel gelöscht und die neuen hinzugefügt:
Java:
public class Fenster extends JFrame{
public Fenster(){
super();

Container window= this.getContentPane();
JPanel myPanel = new JPanel();
JButton firstButton= new JButton("first Button");

myPanel.add(firstButton);
window.add(myPanel);

}

public void ereignisX(){

myPanel.removeAll();

JButton newButton = new JButton("new Button");
myPanel.add(newButton);

myPanel.updateUI();

}

}



Nun meine erste Frage: ist diese Vorgehensweise effizient? Mir ist klar, dass Erzeugung von Objekten teuer ist und somit das Programm verlangsamt. Ist es sinnvoll, jedes Mal ein neues Objekt zu erzeugen, in meinem Beispiel "JButton newButton", wenn ein Ereignis eregnisX eintritt? Oder ist es performanter am Anfang des Programms einmalig das Objekt zu erzeugen?

Für eure Antworten bedanke ich mich im Voraus! :toll:

MfG

Sergey
 
Sofern du nicht 100 Buttons hintereinander erzeugst, dürfte man keinen Unterschied merken, der den Aufwand rechtfertigen würde. Ich habe mal versucht, einen Recycler für Point-Objekte zu schreiben, der am Ende rund 4 mal langsamer als new war. Lag wohl an meinen Code, aber das Recycling braucht eben auch seine Zeit.
 
Ja, schreib' deinen Code lesbar und verständlich. Sofern diese Objekte immer neu erzeugt werden können (und nicht etwa einen Zustand haben, der sich ändern kann) kann man sie Erzeugen, wenn man sie braucht. Wenn das ganze "zyklisch" oft durchlaufen werden muss, kann man ggf. mit dem CardLayout zwischen den schon gebauten Panels umschalten, aber am Anfang eine dicke Variablenliste zu haben, die nur dem Zweck dient, nach einem Klick ein paar Mikrosekunden zu sparen, macht sicher keinen Sinn...
 
Danke erstmals für eure schnellen und hilfreichen Antworte!

CardLayout ist eine tolle Sache!

Gibt es aber keine Konventionen oder Entwurfsmuster für GUI Programmierung? Vielleicht Regeln, an die sich jeder Programmiere halten soll? (z.B. dass man in den Schleifen keine Objekte erzeugt, sondern nur mit der Instanz eines Objektes arbeitet.)
 

Zurück
Oben