GUI als eigene Klasse oder in die Startklasse?

wolfgang12

Mitglied
Hallo,

soll ich die GUI als eigene Klasse oder in die Startklasse packen?

Ich habe mal als Bsp folgendes gemacht:

Klasse "AUTO":
Java:
public class Auto {

	String name = "";
	int leistung = 0;
	int laenge = 0;
	int breite = 0;
	
	
	public Auto(String typ, int leistung){
		this.leistung = leistung;
		this.name = typ;
	}
	
	public int getLeistung(){
		return leistung;
	}
	
	public String getName(){
		return name;
	}
}

"START"-Klasse:
Java:
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Start {


	public static void main(String[] args) {


		
		
		Auto bmw = new Auto("BMW", 150);
		
		//GUI
		JFrame meinFrame = new JFrame("Fenster");
		meinFrame.setLayout(null);
		
		JTextField textField = new JTextField();
		textField.setBounds(20,20,50,20);
		textField.setText(bmw.getName());
		
		
		meinFrame.add(textField);
		meinFrame.setSize(300, 300);
		meinFrame.setVisible(true);		
		
		
		}

	}


Nun meine Frage:


Lohnt es sich die GUI als eigene Klasse zu machen, sprich nicht direkt in die Startklasse zu packen? Und wie mache ich das dann?

Danke :D
 

w0ddes

Bekanntes Mitglied
Da ich im Betrieb meistens nach dem MVC-Prinzip meine Programme aufbaue, ist die GUI immer ausgelagert. Das erhöht natürlich zum einen die Übersichtlichkeit aber auch den Arbeitsaufwand ein wenig.

Aber an sich musst du das für dich entscheiden:
Wenn es wirklich nur ne kleine Anwendung für dich zu Hause ist, kannst du's ja ruhig in der Startklasse lassen aber sobald mehrere Leute daran arbeiten oder du es später noc hausbauen willst, bietet sich eine auslagerung natürlich an ;)
 

diggaa1984

Top Contributor
ich würde es aus Prinzip schon immer auslagern und nicht unbedingt zu sparsam sein was neue Klassen angeht, generell erstelle ich für jeden abgeschlossenen Komplex in der GUI eine neue Klasse, seis Logfenster, Editoren, Listenansichten etc.

So weiss ich genau wo ich zu suchen habe, wenn ich Komponente X ändern möchte.
 
B

bygones

Gast
Java:
public class MyFrame {
  private JFrame theFrame;

  public void buildGui() {
     theFrame = new JFrame("...");
     // alles mit theFrame wie in deinem code
    theFrame.setVisible(true);
  }
}

und als aufrufer
Java:
public static void main(String[] args) {
   new MyFrame().buildGui();
}
 
T

Tomate_Salat

Gast
Java:
public class MyFrame {
  private JFrame theFrame;

  public void buildGui() {
     theFrame = new JFrame("...");
     // alles mit theFrame wie in deinem code
    theFrame.setVisible(true);
  }
}

und als aufrufer
Java:
public static void main(String[] args) {
   new MyFrame().buildGui();
}

Naja würde ich eher so starten:
Java:
class MyFrame {
  private JFrame theFrame;

  public void buildGui() {
     theFrame = new JFrame("...");
     // alles mit theFrame wie in deinem code
     SwingUtilities.invokeLater(new Runnable()
	 {		
		@Override
		public void run()
		{
			theFrame.setVisible(true);			
		}
	 });
     
  }
}

aber ich baue meine GUI auch in einer eigenen Klasse mit eigener Methode zum starten. In die main kommt bei mir nur das Notwendigste.
 

wolfgang12

Mitglied
Java:
public class MyFrame {
  private JFrame theFrame;

  public void buildGui() {
     theFrame = new JFrame("...");
     // alles mit theFrame wie in deinem code
    theFrame.setVisible(true);
  }
}

und als aufrufer
Java:
public static void main(String[] args) {
   new MyFrame().buildGui();
}



Danke so mache ichs. Nur wie benutze cih dann z.B. setText? denn die objekte habe ich ja noch nicht erstellt?!

Danke
 

wolfgang12

Mitglied
Danke aber das mit den Threads mache ich später ;)

Es gine doch auch eine statische methode doer?


also:

Java:
static JFrame meinFrame = new JFrame("Fenster");
	
	public static void buildGui(){
//bla bla


Aufruf per
Java:
MyGui.buildGui();
 

icarus2

Top Contributor
Hab das von einem Artikel, den ich auf Java World gelesen habe. Wenn ich mich richtig erinnere wird dort erklärt wiso man EventQueue nutzen muss, damit die Swing Applikation threadsicher ist.

Korrigiert mich wenn ich was falsch im Kopf habe... habe den Artikel vor einem Jahr oder so gelesen. Ich glaube auf Seite 5 ganz unten in der "Conclusion" sieht man die Struktur. Aber es lohnt sich einmal den ganzen Artikel zu lesen.
 

diggaa1984

Top Contributor
Java:
public static void invokeLater(Runnable doRun) {
	EventQueue.invokeLater(doRun);
    }

:) .. so wie ich es verstanden habe geht es in dem Artikel darum, die GUI von Anfang an in dem EDT zu erzeugen. Die obige Methode seh ich in der SwingUtilities-Klasse .. heisst sie schleift den Aufruf also direkt an die EventQueue weiter.

Ich weiss nicht genau, aber eventuell war das früher noch anders gewesen?! Aber mit der JDK1.6 - Lib die ich grad da hab, ist SwingUtilities.invokeLater identisch zu EventQueue.invokeLater .. aber dennoch ein interessanter Artikel der die Anfänge aufzeigt :)
 

icarus2

Top Contributor
Hab mir gerade die API angeschaut und es sieht ganz danach aus, als würde SwingUtilities auch funktionieren. Ich habe zumindest nichts finden können, was das Gegenteil beweisen würde.
 

Bergtroll

Bekanntes Mitglied
Guuude Wolfgang,

du kannst mit dem einfachen Beispiel starten, aber du solltest sobald wie möglich versuchen zu verstehen, was es mit dem sog. Event Dispatcher Thread auf sich hat und warum dir das kompliziertere Beispiel mit dem SwingUtilities.invokeLater vorgelegt hat, google mal nach Tutorials darüber. Wenn du es nicht machst, wird es dir über kurz oder lang passieren, dass deine Software Fehler wegen race conditions wirf.

Einstieg: Race Condition ? Wikipedia und die unten aufgeführten Verweise. Das wirst du brauchen, um Tutorials zum GUI Start zu verstehen.

Viele Grüße,
Bergtroll
 

hdi

Top Contributor
Ich möchte auch noch nen Tipp abgeben:

Ich würde es vermeiden, eine Operation auf den EDT zu legen, wenn ich mich innerhalb von modularem Code befinde, d.h. in Klassen, die ich später für verschiedene Programme verwenden will.

Meiner Meinung nach sollte sowas immer erst vom jeweiligen Programm an geeigneten Stellen gemacht werden. Ansonsten hat man nie genau den "Überblick" über die EventQueue, wenn sie intern in irgendwelchen Klassen die man benutzt verwendet wird.

Dann fängt man an Code auf den EDT zu legen, der Code auf den EDT legt ;)

Das alleine ist wohl - wenn auch unnötig - nicht so schlimm. Ein absolutes No-Go ist allerdings imho ein invokeAndWait in modularem Code. Angenommen wir haben ein invokeAndWait in der buildGui() :

Java:
EventQueue.invokeLater(new Runnable(){
    public void run(){
         new MyFrame().buildGui(); // BOOM! 
    }
});

jm2c- keine Ahnung ob ich mit der Ansicht falsch liege? Klar es ist schön wenn eine Klasse möglichst viel kapselt, aber ich finde mit dem EDT sollte sie nicht rumpfuschen.. :pueh:
 

wolfgang12

Mitglied
Nun habe ich die GUI Sachen in eine eigene Klasse gepackt.

Doch wie weise ich z.B. einem TextField per "setText()" Strings zu, die auf Objekten basieren? Also im Beispiel z.B. jTextField1.setText(bmw.getName());


Die Objelkte werden ja erst später instanziert und daher ginge es so nicht direkt in der GUI Klasse, oder?
 

hdi

Top Contributor
Macht ja nix - der Compiler hat damit kein Problem.
Damit es zur Laufzeit in so einem Fall nicht zum Fehler kommt musst du das halt überprüfen:

Java:
if(bwm != null){
    field.setText(bmw.getName());
}
else{
    field.setText("");
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Amina556 Eigene Klasse definieren Java Basics - Anfänger-Themen 9
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
D Attribut Telefonnummer - eigene Klasse oder String Java Basics - Anfänger-Themen 13
S Eigene LinkedList Klasse Java Basics - Anfänger-Themen 4
H Klassen auf eigene Klasse zugreifen Java Basics - Anfänger-Themen 2
D Klassen Eigene Klasse für ArrayList Java Basics - Anfänger-Themen 6
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
J Eigene Klasse für die Variablen? Java Basics - Anfänger-Themen 3
S Wann existiert eine Instanz (eigene Klasse) Java Basics - Anfänger-Themen 8
S Eigene Exception Klasse - fehlender Konstruktor mit String Java Basics - Anfänger-Themen 3
B eigene klasse in listen eintragen Java Basics - Anfänger-Themen 6
A Objekte in eigene Klasse auslagern Java Basics - Anfänger-Themen 2
Kenan89 ActionListener in eigene Klasse Java Basics - Anfänger-Themen 8
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
F Klassen Eigene Klasse definieren Java Basics - Anfänger-Themen 4
T eigene Exception Klasse Java Basics - Anfänger-Themen 12
F Eigene Klasse für die Keys von HashMap Java Basics - Anfänger-Themen 5
G Eigene Klasse als Array, zugriff? Java Basics - Anfänger-Themen 2
S Eigene Stack Klasse Java Basics - Anfänger-Themen 26
T Konstruktor für eigene Klasse erstellen Java Basics - Anfänger-Themen 6
H Buttonbefehle in eigene Klasse schreiben Java Basics - Anfänger-Themen 8
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
nrg Eigene simple List-Klasse programmieren Java Basics - Anfänger-Themen 3
M eigene Property-Klasse Java Basics - Anfänger-Themen 2
L Aus einer Methode eine eigene Klasse machen - modular coden Java Basics - Anfänger-Themen 14
E Eigene Stack Klasse schreiben Java Basics - Anfänger-Themen 12
M Eigene Klasse mit "Enumeration"-Datentyp verknüpfe Java Basics - Anfänger-Themen 16
F Eigene Klasse für Events Java Basics - Anfänger-Themen 10
B eigene Klasse wird nicht im Hauptprogramm erkannt! Java Basics - Anfänger-Themen 4
U Eigene klasse schreiben Java Basics - Anfänger-Themen 13
A meine eigene IO Klasse Java Basics - Anfänger-Themen 3
L eigene Klasse für DB Java Basics - Anfänger-Themen 5
G Vererbung: Methoden die eigene Klasse zurückgeben Java Basics - Anfänger-Themen 8
B Panel mit Radiobuttons als eigene Klasse Java Basics - Anfänger-Themen 4
E Eigene Klasse erstellen? Java Basics - Anfänger-Themen 21
D Eigene Klasse als Import Java Basics - Anfänger-Themen 10
M eigene klasse definieren und verfügbar machen Java Basics - Anfänger-Themen 9
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
T Datentypen Eigene Datentypen Java Basics - Anfänger-Themen 15
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
I Eigene Java Tools Nutzung Java Basics - Anfänger-Themen 6
G eigene Bibliothek einbinden Java Basics - Anfänger-Themen 1
K Eigene Annotations, Pre-/Post-/Call-Method Java Basics - Anfänger-Themen 6
O Erste Schritte Eigene charAt(i) Methode schreiben Java Basics - Anfänger-Themen 10
D Methoden Eigene Methode um alle Ausgaben aufzurufen Java Basics - Anfänger-Themen 17
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
P Maven und eigene Jars Java Basics - Anfänger-Themen 4
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
A Eigene Methoden entwicken Java Basics - Anfänger-Themen 3
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
H GSON-Bibliothek für eigene Programme benutzen Java Basics - Anfänger-Themen 2
N Eclipse - eigene Icons unter ClassPath Resource Java Basics - Anfänger-Themen 0
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
R eigene Graphikbedienelemente Java Basics - Anfänger-Themen 8
V Generics / eigene Liste Java Basics - Anfänger-Themen 4
T Eigene Bedingung in IF-Bedingung Java Basics - Anfänger-Themen 22
P Java 8 & Eigene Applets Java Basics - Anfänger-Themen 3
E Best Practice Exaktes Rechnen mit (Pseudo-)Rationalen/Realen Zahlen. Operations Zuweisung für (eigene) Klassen Java Basics - Anfänger-Themen 3
G eigene Bibliothek in Java importieren Java Basics - Anfänger-Themen 5
M Wann eigene implementierte HashCode Methode zwingend erforderlich? Java Basics - Anfänger-Themen 1
P Vererbung Eigene HashMap Variante Java Basics - Anfänger-Themen 2
P Eigene Knöpfe mit eigenem Listener Java Basics - Anfänger-Themen 5
T Muss ein Parametertest immer eine eigene Testklasse sein? Java Basics - Anfänger-Themen 3
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
O GUI: Eigene Fenster "Form"? Java Basics - Anfänger-Themen 13
F Eigene LinkedList - toString Java Basics - Anfänger-Themen 10
O Denkanstöße für eigene Konfigurations-Datei Java Basics - Anfänger-Themen 12
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
C eigene Exception Java Basics - Anfänger-Themen 4
M externe JARs in die eigene JAR einbinden Java Basics - Anfänger-Themen 9
V Klassen import - einfaches Umleiten auf eigene Klassen? Java Basics - Anfänger-Themen 8
S [JavaFX 2.1] - Eigene Sprachauswahl? Java Basics - Anfänger-Themen 4
K Klassen Eigene Exception verwenden Java Basics - Anfänger-Themen 9
J eigene packages bzw klassen verwenden Java Basics - Anfänger-Themen 25
E Eigene Stackklasse Java Basics - Anfänger-Themen 7
B Eigene Exceptions entwerfen Java Basics - Anfänger-Themen 3
S Eigene Exception Schreiben und Welche Auslösen wie ? Java Basics - Anfänger-Themen 7
P eigene kleine Datenverwaltung Java Basics - Anfänger-Themen 5
N Eigene Methoden-> Werte übergeben Java Basics - Anfänger-Themen 5
U Klassen Eigene Klassen importieren Java Basics - Anfänger-Themen 13
S Eigene Klassen addieren Java Basics - Anfänger-Themen 3
B OOP Eigene Objekte in Arrays zusammenfassen Java Basics - Anfänger-Themen 3
E Eigene class datum Java Basics - Anfänger-Themen 2
G Eigene MessageBox kreieren Java Basics - Anfänger-Themen 9
I Erste Schritte Eigene Fehlermeldungen bei Exceptions Java Basics - Anfänger-Themen 19
S Eigene KeyEvent-Mask erstellen Java Basics - Anfänger-Themen 4
X Eigene Libary Java Basics - Anfänger-Themen 2
Crashbreaker Eigene Java-Programm ohne hilfe des CMD starten Java Basics - Anfänger-Themen 11
A Klassen Eigene Datenklasse - Strings mit fixer Länge Java Basics - Anfänger-Themen 2
G Shape um eigene Achse drehen Java Basics - Anfänger-Themen 2
P Vererbung Basisklasse soll eigene Methode benutzen Java Basics - Anfänger-Themen 38
J Eigene kleine Datenbank programmieren Java Basics - Anfänger-Themen 2
xehpuk Ordner "Eigene Bilder" ansteuern Java Basics - Anfänger-Themen 3
V Sonderzeichen als eigene "Operatoren" im JTextField Java Basics - Anfänger-Themen 4
D Eigene equals methode schreiben Java Basics - Anfänger-Themen 4
dataframe OOP Eigene typisierte Liste Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben