Swingeinführung Schritt für Schritt

  • Themenstarter Themenstarter trez
  • Beginndatum Beginndatum
T

trez

Gast
Gibt es in den unendlichen Weiten des Web oder notfalls bei Amazon eine Einführung in Swing?

(Hier habe ich das da gefunden und frage mich als erstes schon warum der Mittelteil (West, Center, East) verschwindet und die anderen beiden (North und South) so bleiben wie sie sind wenn man das Fenster verkleinert.)

Wirklich Beginner-niveau ist gefragt ;-) darum hätte ich lieber kein Papier.

Ziel ist es natürlich von Anfang alles richtig zu machen,
Die Idee: einge Knöpfe, Ein- und Ausgabefelder

Im zweiten Schritt eine Menustruktur (Windows-ähnlich)

Dann vielleicht eine Zeichnungsfläche auf der sich einfach Dinge wie z.B. Geraden darstellen lassen ...
 
frage mich als erstes schon warum der Mittelteil (West, Center, East) verschwindet und die anderen beiden (North und South) so bleiben wie sie sind wenn man das Fenster verkleinert.

Hallo trez,

Die Höhe von North und South, sowie die Breite von West und East, sind durch die PreferredSize der dort untergebrachten Komponenten festgelegt. Die Breite von North und South, sowie die Höhe von West und East, passen sich an die Fenstergröße an. Center nimmt allen Platz, der übrig bleibt.

Gruß,
André
 
Zuletzt bearbeitet:
(Hier habe ich das da gefunden und frage mich als erstes schon warum der Mittelteil (West, Center, East) verschwindet und die anderen beiden (North und South) so bleiben wie sie sind wenn man das Fenster verkleinert.)
Zu der Frage wird sich wahrscheinlich nicht wirklich etwas in der Literatur finden. Grundsätzlich orientieren sich viele LayoutManager an der PreferredSize der Komponenten.
Die Frage warum da einzelne Komponenten verschwinden, lässt sich mit einem Blick in den Source-Code beantworten
BorderLayout hat gesagt.:
Java:
public void layoutContainer(Container target) {
      synchronized (target.getTreeLock()) {
	Insets insets = target.getInsets();
	int top = insets.top;
	int bottom = target.height - insets.bottom;
	int left = insets.left;
	int right = target.width - insets.right;

        boolean ltr = target.getComponentOrientation().isLeftToRight();
        Component c = null;

	if ((c=getChild(NORTH,ltr)) != null) {
	    c.setSize(right - left, c.height);
	    Dimension d = c.getPreferredSize();
	    c.setBounds(left, top, right - left, d.height);
	    top += d.height + vgap;
	}
	if ((c=getChild(SOUTH,ltr)) != null) {
	    c.setSize(right - left, c.height);
	    Dimension d = c.getPreferredSize();
	    c.setBounds(left, bottom - d.height, right - left, d.height);
	    bottom -= d.height + vgap;
	}
	if ((c=getChild(EAST,ltr)) != null) {
	    c.setSize(c.width, bottom - top);
	    Dimension d = c.getPreferredSize();
	    c.setBounds(right - d.width, top, d.width, bottom - top);
	    right -= d.width + hgap;
	}
	if ((c=getChild(WEST,ltr)) != null) {
	    c.setSize(c.width, bottom - top);
	    Dimension d = c.getPreferredSize();
	    c.setBounds(left, top, d.width, bottom - top);
	    left += d.width + hgap;
	}
	if ((c=getChild(CENTER,ltr)) != null) {
	    c.setBounds(left, top, right - left, bottom - top);
	}
      }
}
Letztendlich liegt es an der Reihenfolge, in der die Komponenten gezeichnet bzw. deren Größen definiert werden. NORTH, SOUTH, EAST...
 
Zuletzt bearbeitet:
Na Danke! Aber die Insel und Schritt für Schritt ???:L Die ist eher was für Leute die schon eine Ahnung davon haben was sie wollen.

Also bitte: Swing for Dummies

1. braucht es ein ....
2. kann man darauf ....
3. kann man da platzieren
4. kann man da Anhängen

Und dann hat man ein Hello World auf Knopfdruck 🙂

(Oder muss man hier immer erst Ausführen dass man die Insel kennt und das man google kennt und welche Suchbegriffe man dort schon verwendet hat und dass man google.ch und nicht google .com verwendet hat und und und ?)

Fernziel ist übrigens herauszufinden warum unser Programm nicht in allen Fällen auf die Tastatur ragiert - aber das ist ein FERNziel 😀
 
Wie willst du bitte mit Swing etwas machen, wenn du Java so noch nicht gut kannst??? Wenn du dich (ein bischen) auskennst hilft dir "Java ist auch eine Insel" sehr wohl weiter. Ansonsten würd ich mal bei Kapitel eins Anfangen 🙂🙂🙂🙂
 
Swing hat nun mal nur nebenbei mit Java zu tun - Swing ist mindestens ein Abstraktionlayer höher. Was braucht es alles - schön der Reihe nach damit eine Swing-Applikation läuft - ich hab des öfteren gelesen: "So mache man das nicht" --- genau das möchte ich vermeiden.

Und die Insel ist gut wenn ich das richtig Stichwort weiss - aber wenn ich danach suche welcher Art von Eventhandler wo am Besten geeignet ist, ist sie nicht das richtige Werk.
 
Und die Insel ist gut wenn ich das richtig Stichwort weiss - aber wenn ich danach suche welcher Art von Eventhandler wo am Besten geeignet ist, ist sie nicht das richtige Werk.

Solche spezifischen Infos findest du gewöhnlich im Tutorial zu der betreffenden Komponente.
Was die LayoutManager angeht, oben habe ich dir das BorderLayout in drei Sätzen erklärt. Das komplizierteste Layout das im Java AWT Package enthalten ist, heißt GridBagLayout. Eine einfache Einführung ins GridBagLayout findest du hier: GridBagLayout - Byte-Welt Wiki

Gruß,
André
 
EDIT: Bitte beachten 🙂 ich habe wohl eine halbe Stunde lange getippt :-(

(das GridBagLayout werde ich mir gleich mal zu Gemüte führen - ich hab noch nicht reingeschaut und die Postings dazwischen auch)

Jetzt aber eine ernsthafte Frage: Drücke ich mich so unklar aus???
Ich bin schon eher verwirrt.

Gesucht ist eine HowTo: "Wie bastle ich ein GUI"

Welche Komponente brauche ich als aller erstes, welche als Zweites.....
Wenn das dann klar ist helfen API und Insel möglicherweise weiter.

Und noch was - Reverseengineering von Code ist ebenfalls eine der schlechtesten Varianten, weil im Code nie drin steht warum etwas ist wie es ist, und was für Alternativen es gäbe...

Nur so ein Beispiel: Ich hab ein TicTacToe gefunden da steht so ziemlich als erstes getContentPane() in der BorderLayoutDemo ist das nicht so - also da beginnt es doch. Was ist der Unterschied, warum ist es da so beim anderen anders? Und nein, die API-Beschreibung von JFrame durchlesen ist kaum der richtige Ansatz, denn da steht viel zu viel overhead drin.

Hm was muss ich noch ausschliessen? IMHO gar nichts aber ich werds ja demnächst lesen, denn vermutlich habe ich mich wieder zu undeutlich ausgedrückt.

Falls es nichts entsprechendes gibt müsste das jemand schreiben "Swing für Dummies"
 
Zuletzt bearbeitet von einem Moderator:
Ich verstehe dein Problem nur zum Teil. Du willst etwas Swing lernen, nicht zu kompliziert und nicht zu viel. Kein Buchautor auf der Welt wird aber ein Buch zu Swing veröffentlichen wo er nur einen minimalen Ausschnitt aus dieser Welt behandelt. So ein Buch würde, zu Recht, verrissen. Java ist eine Insel oder die "Von Kopf bis Fuß"-Reihe behandeln Swing sehr anschaulich und erklären auch viel. Wenn du einen Teil weglassen willst, mach das doch. Es gibt auch ein Kapitel nur über JFframe, Panel usw. Ohne Listener.
 
Na Danke! Aber die Insel und Schritt für Schritt ???:L Die ist eher was für Leute die schon eine Ahnung davon haben was sie wollen.

Also bitte: Swing for Dummies

wenn Insel zu kompliziert ist, ist AWT/Swing es auch. und ich mein, es wär zumindest mal sinnvoll, die 15 anderen vorherigen Kapitel gelesen zu haben, bevor man mit Swing anfängt.

mit den tutorials how to use XXX ist auch nicht die API-Dok gemeint - sondern diese kann beim anschließenden Implementierungsvorgang benutzt werden.
Was man möchte hinterher realisieren, das muss man selbst wissen... in Büchern steht auch nicht, machen sie dies und das und dies und jenes.

Mit Erfahrung weiß man bestimmt, dass den North-, South-, East-, West-Komponenten zuerst Platz zugeteilt wird - danach den anderen.

Einsteigerseminar würd ich vergessen, das ist Mist und man merkt es als Anfänger zunächst nicht.

Let me google that for you
 
Wer nicht einmal den Mut hat zu seinem Login zustehen den kann ich nicht wirklcih ernst nehmen und die 15 Kapitel vorher nützen rein gar nichts, wenn es darum geht die Konzepte einer Library zu verstehen.

Wieviel hat sich an den Konzepten von Swing seit 2002 verändert? Ist viel dazu gekommen?
(Aus diesen Jahren sollten noch Bücher vorhanden sein - lohnt es sich diese herauszusuchen?)
 
Zuletzt bearbeitet von einem Moderator:
Es ist deine Unterstellung dass ich das nicht kann aber das ist OT - die Frage war eine ganz andere ...
 
Swing ist im Prinzip auf Java 1.4 Niveau stehengeblieben, sieht man von ein paar kosmetischen Korrekturen ab. Vor allem Enums und Generics würden helfen, ein wenig Ordnung ins Chaos zu bringen, aber auch ein besseres Concurrency-Konzept (invokeLater und invokeAndWait können ja nicht der Weisheit letzter Schluss sein) und vereinheitlichtes Event-Modell (hat schonmal jemand gezählt, wieviel Model-, Event- und Listenertypen es gibt) wäre langsam mal angesagt. Von neuen Komponenten wie Kalendern oder Charts mal ganz zu schweigen.
 
Es ist deine Unterstellung dass ich das nicht kann aber das ist OT - die Frage war eine ganz andere ...

Trollaufgebot würd ich mal sagen...

stell dir vor, ich kenne die Kapitel und ich kann mir intuitiv erschließen, wie einfache Layoutmanger funktionieren.

wenn du keinen Rat haben willst von erfahrenen Benutzern, die nicht registriert sind, dann kauf doch das Einsteigerseminar.
 
Na Danke! Aber die Insel und Schritt für Schritt Die ist eher was für Leute die schon eine Ahnung davon haben was sie wollen.

Ich hab bei meinem Post nur auf das hier verweisen wollen, aber ich geh mal davon aus das du die grundlagen kennst wenn du unbedingt etwas mit swing machen willst.
 
wenn du keinen Rat haben willst von erfahrenen Benutzern, die nicht registriert sind, dann kauf doch das Einsteigerseminar.

Oh Einsteigerseminar? Jetzt wird es ja doch noch konkret ... wie heisst das genau? Link zu Amazon oder was auch immer?

Offensichtlich drücke ich mich unpräzise aus oder es ist hier nicht üblich genau zu lesen.
Das mit dem Layoutmanager (warum das mittlere Feld verschwindet und die anderen nicht) interessiert mich erst in zweiter Linie.

In erster Linie interessiert mich was in welcher Reihenfolge instanzieren werden soll/muss
Wo ich was (Eventhandler, Action Listener - was ist der unterschied) anhängen kann und vielleicht noch welche Alternativen es gibt.

Es geht ja wie gesagt darum, dass die Applikation die ich hier entwickle (na ja wenn ich ehrlich bin eher entwickeln lasse - meine Programmierer können das besser) nicht auf Alt-X reagiert, wenn der Fokus nicht in einem Eingabefeld ist - ein nice to have fature um das ich mich neben Testerei und Requirements formulieren kümmere, wenn ich sonst nicht viel zu tun habe

Ich habe nie erwartet dass die Fragen hier beantwortet werden - es war nur um zu erläutern welche Art von Einstiegshilfe ich suche.

Und zum Thema Troll - no comment
 
In erster Linie interessiert mich was in welcher Reihenfolge instanzieren werden soll/muss
Die Reihenfolge ist egal (OOP), wichtig ist nur, dass ein Objekt existiert wenn man es braucht ;-)
Wo ich was (Eventhandler, Action Listener - was ist der unterschied) anhängen kann und vielleicht noch welche Alternativen es gibt.
Das steht z.B. in der API Doku, zusätzlich existieren zu den einzelnen Swingkomponenten Tutorials und Beispielcode (Hinweis ebenfalls in der API zu finden)
Es geht ja wie gesagt darum, dass die Applikation die ich hier entwickle (na ja wenn ich ehrlich bin eher entwickeln lasse - meine Programmierer können das besser) nicht auf Alt-X reagiert, wenn der Fokus nicht in einem Eingabefeld ist
Stichwort: Key bindings
 
Den link hat tommysenf doch weiter oben gepostet..

Gruß
frapo

Ach das war gmeint .... mea culpa

Und zu letztem Posting ARRRRGH WAS WAS WAS
braucht es in welcher Reihenfolge, aber so langsam denke ich mir dass mich die einen hier nur noch ver* wollen.
Weil die Leute hier meine Anforderungen sehr gut verstehen - aber ich hätte es eigentlich schon früher merken sollen.
Da der Anteil an kostruktiven Psotings je länger je mehr abnimmt -> Thread closed
 
Was hast du? Die Initialisierungsreihenfolge ist (abgesehen von Layouts die "stapeln", wie Box, aber das sollte ja einleuchten) völlig egal: Ob du erst den Listener an den Button hängt und dann den Button in den Panel oder andersrum ist schnuppe.

Und was du brauchst, liegt doch auf der Hand: Du brauchst Komponenten (wie Buttons), Container, die diese aufnehmen (wie JPanel), Layoutmanager (um die Komponenten auf den Containern anzuordnen), Listener bzw. Actions (damit auch was passiert, wenn du auf den Knopf drückst), und um das alles ein hübsches JFrame drumrum. Das hättest du inzwischen auch aus der Insel oder anderen hier genannten Quellen lernen können, anstatt hier den sterbenden Schwan zu geben 😛
 
Da der gute Mann eher programmieren lässt als selbst zu programmieren, wäre es meiner Meinung nach logischer, seine Programmierer hier fragen zu lassen 😀.

Gruß,
André
 
Tja, es dauerte zwar eine Weile aber mitlerweile ist mir klar geworden wer das ist bzw. welche Firma dahinter steht - der einzige der GUI-Programmierung einigermassen im Griff hatte, musste ins Militär und wird wohl auch nicht mehr in die Firma zurückkehren - jetzt muss der SW-Architekt und Projketmanager halt wieder mal selbst an die Tasten ;-)
 
Weil die Leute hier meine Anforderungen sehr gut verstehen - aber ich hätte es eigentlich schon früher merken sollen.

ja, so eine Spezifikation zu formulieren ist gar nicht so leicht. Hier wurden alle Fragen beantwortet, dazu könnte man mal ein danke ablassen oder
nicht fokussierte Komponenten können nicht auf KeyEvent reagieren - der API lässt es nicht zu
 
Ich kenne ihn (den trez) und ich weiss genau dass er hier nicht mehr liest - deinen Nick hat er als Provokation aufgefasst und da ist er mehr als konsequent.

Ich kenne aber auch die Applikation (als Supporter) und habe schon den einen oder anderen Report eingereicht. Unter anderem die Anfrage warum Alt-X nicht immer funktioniert

Einfach so Interesse halber:
Die Applikation hat ein Fenster und darauf hat es diverse Felder, Menues und Knöpfe - wenn die Applikation startet ist kein Feld selektiert.
Ich kann eine Berechung durchführen lassen und dann im Normalfall mit Alt-X die Zwischenresultate anschauen, aber das geht nicht, weil eben kein Eingabefeld selektiert ist.

Gibt es echt keine Möglichkeit einen Handler an den Hintergrund der Applikation zu hängen? Sozusagen der Defaulthandler? Einen für alle Events die zwar innerhalb des Applikatinons-Fensters abgesetzt werden, aber für die keine Komponente zuständig ist?
 
Einfach so Interesse halber:
Die Applikation hat ein Fenster und darauf hat es diverse Felder, Menues und Knöpfe - wenn die Applikation startet ist kein Feld selektiert.
Ich kann eine Berechung durchführen lassen und dann im Normalfall mit Alt-X die Zwischenresultate anschauen, aber das geht nicht, weil eben kein Eingabefeld selektiert ist.
Das Stichwort hierzu hatte ich in dem Thread schon mal gegeben: KeyBindings
Gibt es echt keine Möglichkeit einen Handler an den Hintergrund der Applikation zu hängen? Sozusagen der Defaulthandler? Einen für alle Events die zwar innerhalb des Applikatinons-Fensters abgesetzt werden, aber für die keine Komponente zuständig ist?
Ja die gibt es. Man kann Key und Input Events an oberster Stelle abfangen. Hab ich bisher nur einmal in einem Programm verwendet, um ausschliesslich auf das Drücken/Loslassen von SHIFT und STRG zu reagieren - also SHIFT und STRG nicht als Modifier. Da müsste ich allerdings erstmal zu Hause in meinen alten Codes nachschauen.

Ein Bsp zu KeyBindings:
Java:
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

public class KeyBindingDemo extends JFrame {
	public KeyBindingDemo() {
		this.setContentPane(new KeyBindingPanel());
	}
	
	class KeyBindingPanel extends JPanel {
		public KeyBindingPanel() {
			Action altXAction = new AbstractAction() {
			    public void actionPerformed(ActionEvent e) {
			        JOptionPane.showMessageDialog(KeyBindingPanel.this, "Alt + X pressed!");
			    }
			};
			this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK), "altXAction");
			this.getActionMap().put("altXAction", altXAction);
		}
	}
	
	public static void main(String[] args) {
		JFrame frame = new KeyBindingDemo();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
 
Ich kann das keyword (KeyBindings) zwar grad nirgends finden aber ich hab das auch nur mit einem halben Auge verfolgt.

Faszinierend finde ich einmal mehr das Folgende:
Jemand anonymes empfiehlt "Java-Swing. Das Einsteigerseminar" heiss, aber dasselbe Buch wird kurz darauf von einen anderen Anonymen als Mist bezeichnet ...
 
Faszinierend finde ich einmal mehr das Folgende:
Jemand anonymes empfiehlt "Java-Swing. Das Einsteigerseminar" heiss, aber dasselbe Buch wird kurz darauf von einen anderen Anonymen als Mist bezeichnet ...

Was meinst du mit faszinierend? Das das Buch nicht der absolute Brüller ist ist mir eigentlich auch klar gewesen. Ich habe es selbst auch nicht gelesen. Allerdings vor Jahren mal ein oder zwei andere Titel aus der Reihe zu Beginn des Studiums. Allerdings dachte ich mir das es genau das ist was der Threadersteller sucht. Ne Art Swing für Dummies hat, in dem keine weiteren Vorkenntnisse erwartet werden.
 
Was meinst du mit faszinierend? Das das Buch nicht der absolute Brüller ist ist mir eigentlich auch klar gewesen. Ich habe es selbst auch nicht gelesen. Allerdings vor Jahren mal ein oder zwei andere Titel aus der Reihe zu Beginn des Studiums. Allerdings dachte ich mir das es genau das ist was der Threadersteller sucht. Ne Art Swing für Dummies hat, in dem keine weiteren Vorkenntnisse erwartet werden.
Eigentlich finde ich die undifferenzierte Aussage "Mist" faszinierend - irgendwie scheinen wir Schweizer anders zu ticken. Wir wollen immer alles begründet haben, ansonsten ist es nichts wert und wir stellen es auf die Stufe "Niveau ist falsch geschrieben, es heisst Nivea". (Ich werd schon wieder provozierend - ich weiss)

Keine weiteren Vorkenntnisse? Irgendwie gibt es einfach keine Literatur für Quereinsteiger - für die die Java an und für sich schnell begreifen (weil C++ Kenntnisse vorhanden sind) aber von GUI keine Ahnung haben. Na ja, das Buch wird ja wohl in einer Bibliothek rumliegen - mal sehen ob es was taugt.
 

Zurück
Oben