Sammlung von Anfängerfragen für mein erstes Programm

mcbert

Mitglied
Hallo Java-Freunde,

ich bin neu hier und auch noch relativ frisch was die Javaprogrammierung angeht.
Da sich mir momentan ein paar Fragen stellen, auf die ich nicht so wirklich Antworten habe, möchte ich diese hier gerne mal los werden.

1) Entwicklungsumgebung
An sich find ich ja Eclipse fein, allerdings bring ich unter OSX gerade kein drag&drop GUI Builder Plugin zum laufen und arbeite nun erstmal mit Netbeans.
=> wie macht Ihr so eure GUI's? oder codiert Ihr wirklich mit GridLayout etc. die ganze GUI selbst?

2) Programmaufbau
Ich schreibe gerade eine SW mit der ich remote function calls zu einem Server machen möchte und anschliessend die Antwort wieder anzeigen. D.h. die Maske soll wie folgt aussehen:
1. Teil: Serverbindungen (Hostname, Port ....) erstmal als Textfeld später wohl mit Configdatei.
2. Teil: Sendeinformation, auch ein Textfeld + Button "senden"
3. Teil: Serverantwort eine Textarea die sowohl die Anfrage als auch die Antwort enthält.
Aus meiner Sicht bringe ich hier momentan nur umständlich OO-Ansätze unter.
Rein von der Logik her hab ich hier nur 1 Klasse. Diese macht:
- die GUI,
- fängt Button events ab,
- baut die Serververbindung auf,
- schickt den call ab
- verarbeitet die Antwort

Ist das so ok? An sich könnte ich evtl. eine eigene Klasse "ServerVerbindung" machen, anschliessend ein Objekt davon welches im Konstruktor die Verbindungsdaten (Host etc.) aufnimmt und mit diversen Methoden den Verbindungsaufbau, Datenversand, Datenempfang übernimmt.
Wäre dieser Ansatz besser?

3) bestehende Klassen
somit auch zu meiner dritten und letzten Frage fürs erste ;-) die oben genannte Klasse "ServerVerbindung" ist ja nichts was nur ich brauche. Wie findet man am dümmsten bestehende Klassen welche ich lediglich einbinden muss?

Vielen Dank im Voraus
 

XHelp

Top Contributor
Willkommen,

nun... zum 1. Punkt: ich würde dir raten am Anfang definitiv mit dem Code die GUIs erstellen. Später, wenn du dann verstehst, wie und was da passiert, kannst du einfachheitshalber auf GUI-Bilder umsteigen, aber Grundlagen musst du dir definitiv aneignen.

3. Auch hier gilt das gleiche. Vor allem das Aufbauen einer Verbindung und das Senden von Daten ist nicht das Schwierigste, deswegen würde ich an deiner Stelle es am Anfang selber machen, damit du weißt wie das geht. Später kannst du ja dann deine eigene Klasse einbinden ;)

2.
2. Teil: Sendeinformation, auch ein Textfeld + Button "senden"
Öhm... meinst du den Inhalt des Textfeldes und die "ID" des Buttons?
Das ganze in nur einer Klasse zu schreiben ist wirklich nicht das wahre. Selbst die GUI würde ich ggf. aufteilen (aber dazu musst du dir paar Theorie-Sachen angucken, z.B. MVC). Aber wenigstens die Connection-Klasse kannst du auslagern.
 

DStrohma

Bekanntes Mitglied
Also ganz ehrlich, ohne GridBagLayout kommst du nicht aus wenn du wirklich mal ein professionelles Programm erstellen willst. Übrigens kannst du auch einen GUI Builder benutzen der eben GridBag benutzt: The Software Vault GUIDE: Advanced GUI Builder for Swing

Du solltest definitiv mehr Klassen erstellen :) Zumindest eine für die GUI (schau dir mal das MVC Patter an), eine für die Logik und einen Controller. Oder du kannst es für den Anfang auch so handhaben dass du Controller & View (also die GUI) zusammen schmeißt.

Ich denke der Ansatz mit der eigenen Klasse wäre schon gut. Musst dir eben immer überlegen: "Könnte ich das irgendwo anders noch einmal benutzen?" Falls ja, dann lagere es in eine eigene Methode oder eben eigene Klasse aus.

Hmm, gute Frage, wo bekommt man Klassen her die man einfügen kann? Im Netz suchen und anpassen :D
 

mcbert

Mitglied
Danke für die Infos,

an sich hab ich mich schon mit den Layouts beschäftigt, da mir klar war, dass man darum nicht rum kommt. Eine drag & drop Oberfläche nimmt einem halt vieles ab, vorallem das trial and error bis es auch mal so aussieht wie man es haben wollte.

Danke für den Guide link, die Videotutorials sind sehr gut dort und der Kollege hält sich ja auch an das MVC Konzept. Das trennen des ganzen macht wirklich Sinn allerdings muss ich mich jetzt erstmal noch ein wenig mehr einlesen wie das mit der Kommunikation zwischen den Klassen funktioniert.

Hab jetzt:
- eine Main Klasse welche die GUI startet,
- eine GUI Klasse, die sich nur um das Layout kümmert
- eine Controller Klasse welche die ausgelösten events verarbeitet.

was schon geht, ist dass die GUI events in der Controller Klasse auslöst. Unklar ist mir gerade noch, wie der Controller wieder was an die GUI zurückgibt. Vermutlich auch mit Listener aber da muss ich nochmal nachforschen.

Vielen Dank erstmal, die nächsten Fragen werden folgen ;-)
 

mcbert

Mitglied
Benötige wohl doch noch ein wenig Unterstützung wenn ich mich an das MVC Modell halte.
Hab jetzt 3 Klassen:
- t_start (startet die Applikation)
- t_gui (erstellt die Oberfläche)
- t_controler (soll die Logik enthalten)

t_start.java:
Java:
import javax.swing.JFrame;
public class t_start {
	public static void main(String[] args) {
		JFrame gui = t_gui.create_gui(new t_controler());
		gui.pack();
		gui.setLocationRelativeTo(null);
		gui.setVisible(true);	
	}

}

t_gui.java:
Java:
import java.awt.event.ActionListener;
import java.beans.EventHandler;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class t_gui {
	static JTextField txt_b = new JTextField(10);	
	
	public static JFrame create_gui(t_controler t_controler) {
		JFrame frame = new JFrame("test");
		JPanel panel = new JPanel();
		JTextField txt_a = new JTextField(10);
		
		JButton btn_trans = new JButton("copy to textfield");
		btn_trans.addActionListener(EventHandler.create(ActionListener.class, t_controler, "transfer"));
//		txt_b.addActionListener(EventHandler.create(ActionListener.class, t_controler, "update"));
		
		panel.add(txt_a);
		panel.add(txt_b);
		panel.add(btn_trans);
		
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(panel);
		return frame;
	
	}
	
	public static void set_txt_b(String new_text) {
		txt_b.setText(new_text);
	}
}

t_controller.java:
Java:
public class t_controler {
	String str_a = "";
	String str_b = "";
	
	public String getStr_a() {
		return str_a;
	}
	public void setStr_a(String strA) {
		str_a = strA;
	}
	public String getStr_b() {
		return str_b;
	}
	public void setStr_b(String strB) {
		str_b = strB;
	}

	public void transfer() {
		str_b = str_a;
		update();
		System.out.println("Transfer-Action performed");
	}
	
	public void update () {
		System.out.println("Update-Action performed");
	}

}

Wie bekomme ich das ganze jetzt so hin, dass wenn der Button gedrückt wird, der Text von der 1. Textbox in die 2. übertragen wird. Wenn ich es richtig verstanden habe, will ich ja den Controller so unabhängig wie möglich haben (d.h. ich möchte nicht über eine public Methode in der Gui Klasse zugreifen um das Textfeld zu ändern sondern lediglich eine Art Event auslösen welcher von der GUI-Klasse über eine Art Listener wieder aufgenommen wird.
 

Java-Freak

Bekanntes Mitglied
also
1. deine Klassennamen sind nicht wirklich gut gewählt
2.momentan willst einfach nur nen fenster mit button der den text von Textfield a zu Textfield b kopiert?seh ich das richtig?ich würde einfach nen ButtonListener und setText() verwenden:
Java:
import java.awt.event.ActionListener;
import java.beans.EventHandler;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
 
public class t_gui {
    static JTextField txt_b = new JTextField(10);   
    
    public static JFrame create_gui(t_controler t_controler) {
        JFrame frame = new JFrame("test");
        JPanel panel = new JPanel();
        JTextField txt_a = new JTextField(10);
        
        JButton btn_trans = new JButton("copy to textfield");
        //btn_trans.addActionListener(EventHandler.create(ActionListener.class, t_controler, "transfer"));/*entweder es ist quatsch oder zu hoch fuer mich ich versteh das auf alle fälle nicht...*/
        btn_trans.addActionListener( new ActionListener() { 
              public void actionPerformed( ActionEvent e ) { 
                   txt_a.setText(txt_b.getText());
                   txt_a.setText("");
             } 
        } );
        
        panel.add(txt_a);
        panel.add(txt_b);
        panel.add(btn_trans);
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel);
        return frame;
    
    }
    
    public static void set_txt_b(String new_text) {
        txt_b.setText(new_text);
    }
}
 
Zuletzt bearbeitet:

mcbert

Mitglied
Hallo,

ist auch nur ein schnelles Beispiel, wo es nicht auf Namen etc. ankommen soll.

Ziel ist eigentlich nur, nachzuvollziehen wie ich die Logik in der Controller-Klasse gestallten muss, damit diese unabhängig von der GUI-Klasse funktioniert.
Dein Ansatz wäre mir an sich schon bekannt, hat aber den Nachteil, dass du Business-Logik in der GUI-Klasse hast.
Für den einfachen Fall ist das sicherlich akzeptabel aber für kompliziertere Sachen scheint der Weg über eine eigene Klasse geschickter zu sein.
 

Marco13

Top Contributor
Auch bei so einem kleinen Beispiel sollte man die NamingConventions beachten. Bei sowas wie
Code:
... create_gui(t_controler t_controler) {
rollen sich zumindest mir die Fußnägel hoch.
Code:
... createGui(Controller controler) {
(das macht schon Sinn für die Lesbarkeit - Code wird höchstens einmal geschrieben, aber was du hier gepostet hast potentiell hunderte Male gelesen)

Aber zur eigentlichen Frage: Bei dieser Umsetzung des Model-View-Controller Patterns fehlt mir persönlich eine relativ wichtige Sache ... ... ... ... ...
 

Marco13

Top Contributor
Ich persönlich finde (ganz subjektiv) dieses Tutorial ... etwas seltsam (hatte ich auch mal in diesem Beitrag erwähnt). Ich fand vom Gesamtbild, der Übersicht und der Vermittlung der Grundidee her eigentlich das hier ganz gut MVC Pattern , aber einige Punkte bei der Implementierung würde ich auch anders amchen.
Ich werde deswegen hier mit meiner Tradition fortfahren, bei jeder neu aufkommenden MVC-Diskussion auf den Beitrag zu verlinken, in dem ich in der vorhergehenden MVC-Diskussion auf den Beitrag der vorhergehenden MVC-Diskussion verlinkt habe: http://www.java-forum.org/allgemein...vc-funktionsweise-controllers.html#post549888 :D
 

mcbert

Mitglied
Sorry Jungs,

ich habs aber immer noch nicht. Das heisst ich hänge in der GUI-Klasse an mein Textfeld einen PropertyChangeListener:

Java:
                    txt_b.addPropertyChangeListener(
				new PropertyChangeListener(){
					public void propertyChange(PropertyChangeEvent e)
					{
						System.out.println("property changed:" + e.getPropertyName());
						if (e.getPropertyName().equals("transfer")) {
							System.out.println("property fired");
						}
					}

				}
			);

Und auf der anderen Seite löse ich ein Event in meiner Controller Klasse aus nachdem der Button gedrückt wurde:

Java:
      private PropertyChangeSupport pCS = new PropertyChangeSupport(this);
      .....
            public void transfer() {
		String old = this.str_b;
		str_b = str_a;
		pCS.firePropertyChange("transfer", old, str_b);
	}

Aber irgendwo hängt es noch, da nur einmal beim Laden der GUI ein "PropertyChange" ausgelöst wird, allerdings nicht wenn ich den Button drücke.
Bin für Tips dankbar
 

XHelp

Top Contributor
Naja, du versuchst mir mit dem Model-View-Controller Entwurfsmuster auseinanderzusetzen... du hast eine View-Komponente und Controller-Komponente erstellt... welche fehlt dir noch?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Musik Sammlung Java Basics - Anfänger-Themen 7
D generischen Sammlung Java Basics - Anfänger-Themen 29
E Prüfen ob Sammlung gesetzt wurde - Lebensmittelsammlung Java Basics - Anfänger-Themen 8
J Einige Anfängerfragen (Datentypen, Wertebereich) Java Basics - Anfänger-Themen 11
M Anfängerfragen.... Java Basics - Anfänger-Themen 2
E Erste Schritte Verschiedene Anfängerfragen (Rekursion, Terminierung, Schleife, etc.) Java Basics - Anfänger-Themen 5
C Einige Anfängerfragen (Return-Wert, Exception...) Java Basics - Anfänger-Themen 11
J Einige Anfängerfragen Java Basics - Anfänger-Themen 3
S Erste Schritte Einige Anfängerfragen Java Basics - Anfänger-Themen 5
B 2 Anfängerfragen zu JDK und javac Java Basics - Anfänger-Themen 4
M Anfängerfragen zu GUI Java Basics - Anfänger-Themen 2
J showInputDialog anfängerfragen =D Java Basics - Anfänger-Themen 3
F Anfängerfragen Java Basics - Anfänger-Themen 3
M Anfängerfragen zu Java Applets Java Basics - Anfänger-Themen 4
A 2 anfängerfragen Java Basics - Anfänger-Themen 5
T verschiedene Anfängerfragen Java Basics - Anfänger-Themen 20
N Anfängerfragen und Zugriff auf JTextField Java Basics - Anfänger-Themen 5
T Anfängerfragen von Takeru Java Basics - Anfänger-Themen 4
R Noch ein paar Anfängerfragen. Java Basics - Anfänger-Themen 4
S Ein paar Anfängerfragen Java Basics - Anfänger-Themen 17
B Grobe Anfängerfragen Java Basics - Anfänger-Themen 2
1 Einige Anfängerfragen Java Basics - Anfänger-Themen 12
A Kleine Anfängerfragen u.a.: Kann man Random "speichern& Java Basics - Anfänger-Themen 6
B Paar richtige Anfängerfragen Java Basics - Anfänger-Themen 7
J gui anfängerfragen Java Basics - Anfänger-Themen 6
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 10
G Icon für App Java Basics - Anfänger-Themen 1
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
V Durchschnittliche Volatility in Prozent für 4 Stunden berechnen Java Basics - Anfänger-Themen 14
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
D Apache HTTPClient für alle Fälle Java Basics - Anfänger-Themen 41
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
J Fehlermeldung unverständlich für Jakarta Java Basics - Anfänger-Themen 17
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
M GUI für Vier-Gewinnt. Java Basics - Anfänger-Themen 4
I JPA Query für mehrere Klassen Java Basics - Anfänger-Themen 3
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
Ostkreuz Counter für Booleanwerte Java Basics - Anfänger-Themen 8
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
Jxhnny.lpz Randomisier für Buttons Java Basics - Anfänger-Themen 13
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
M "Class<T> clazz" im Constructor - auch für int möglich? Java Basics - Anfänger-Themen 7
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Code für Bezahlsystem (auch bei Offline Aktivität) Java Basics - Anfänger-Themen 7
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
M generate Methode für Streams Java Basics - Anfänger-Themen 6
I Datenmodell für "Tags" Java Basics - Anfänger-Themen 6
Lion.King for-Kontrollstruktur für Pyramide Java Basics - Anfänger-Themen 8
B Mit Countdown Midnestdauer für Teilaufgabenerledigung erzwingen Java Basics - Anfänger-Themen 8
J File length als Prüfwert für Download Java Basics - Anfänger-Themen 5
K Spieleidee gesucht für Informatikprojekt - JAVA (BlueJ)? Java Basics - Anfänger-Themen 15
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
javamanoman Java für Online Banking Java Basics - Anfänger-Themen 12
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
I SQL / JPA Query für StartDate und EndDate Java Basics - Anfänger-Themen 1
T getMethode für ein Array Java Basics - Anfänger-Themen 2
Fats Waller Farben mixen für den Hintergrund ? Java Basics - Anfänger-Themen 1
H Suche jemanden für kleine Uni-Abgabe/ mit Vergütung Java Basics - Anfänger-Themen 1
K Für was braucht man die left und right shift operatoren? Was bringen die, also welchen Zweck haben die? Java Basics - Anfänger-Themen 15
N Api nur für Textdatein (.txt) Java Basics - Anfänger-Themen 2
bluetrix Programmieren eines Bots für Zahlen-Brettspiel Java Basics - Anfänger-Themen 9
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
R Ist Java das Richtige für mich? Java Basics - Anfänger-Themen 4
E Mittelquadratmethode für Hexadezimalzahlen Java Basics - Anfänger-Themen 1
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
S BubbleSort für ArrayLists Java Basics - Anfänger-Themen 3
T Übungsbuch für Anfänger Java Basics - Anfänger-Themen 3
L Konzept für Quiz Java Basics - Anfänger-Themen 33
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
L loop für Namen Java Basics - Anfänger-Themen 11
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
nevel Programm für die Summer der Zahlen 1- 1ß Java Basics - Anfänger-Themen 12
I Entity erstellen, die für API gedacht ist Java Basics - Anfänger-Themen 33
C Archiv für eigene Klassen Java Basics - Anfänger-Themen 9
A Junit Test für MysqlDataSource JDBC Java Basics - Anfänger-Themen 3
Animal-Mother BMI Rechner erstellen für W/M Java Basics - Anfänger-Themen 7
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
A Java die richtige Programmiersprache für mein Projekt? Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben