Dynamische Oberflächen

Saban

Erfahrenes Mitglied
Morgen!

Ich hätte da mal ne Frage was dynamische Oberflächen angeht... Ich soll einen Notenberechner schreiben was ja an sich kein Problem ist (JFrame mit paar Labels und Textfeldern, welche ausgelesen werden). Ich hätte es aber gerne so das ich wenn mir z. B. die Textfelder für die Noten ausgehen meine Oberfläche erweitern kann. Also wenn mir jetzt z. B. die Textfeler für die Exen ausgehen, weil wir so viele schreiben, dass ich dann auf ein Button klicken kann um
- mir das Frame zu vergrößern
- ein neues Textfeld dazu kommt
- und die Berechnung automatisch mit angepasst wird
ist dies überhaupt möglich? wenn ja wie? ich hatte bis jetzt nur starre oberflächen, welche einmal geschrieben wurden und wenn es zu änderungen kam man diese aufwendig im Programmcode ändern musste.

MfG
Saban
 
Hallo,

sicher ist sowas möglich. Du musst halt nur schreiben, dass ein Textfeld hinzugefügt wird, wenn du auf einen Button klickst. Du solltest die Anzahl dann in einer Properties-Datei abspeichern, damit bei einem Neustart der Applikation auch noch die Anzahl erhalten bleibt.

MFG

Sascha
 
Morgen Sascha!

So weit hab ich es mir schon gedacht. Was ich kompliziert finde ist folgendes

ich habe ein Frame so aufgebaut:
- das links die Fächer stehen
- und als Sparten überschriften (also ungefähr über 2 Textfeldern) dann immer was für Noten es sind wie z. B. Exen, Schulaufgaben oder sonstiges (ich habe das Layout sozusagen nach den jeweiligen Noten gruppiert)

Wenn ich jetzt z. B. die Exen erweitern will dann muss ich ja das ganze Layout verändern und ich weiß nicht wie ich das schaffen soll. weil sich ja dann alles nach den Exen um die Breite von einem TextFeld verschiebt. Ich weiß nicht ob ich mich klar genug ausdrücken konnte :confused:

MfG
Saban
 
Hi,

tut mir leid das ich erst jetzt schreibe aber ich musste kurz in ner anderen Abteilung aushelfen...
ich benutze eigentlich immer das null-Layout weil ich finde dann kann man alles exakter anordnen

MfG
Saban
 
Mit dem GridbagLayout oder dem TableLayout kann man das eigentlich auch gut.

Wenn du mit dem Null-Layout arbeitest, dann muss du halt alles andere neu positionieren, sobald du ein Object hinzugefügt hast.

MFG

Sascha
 
Wäre es mit einem Layout Manager evtl einfacher
Weil ich ehrlich gesagt kein bock hab wieder mit Variablen um mich zu werfen für die Länge, Breite etc.
Die Code für die Oberfläche sollte eigentlich so einfach wie möglich gehalten werden, weil ich wie gesagt schon einen geschrieben habe und ich versucht habe die Oberfläche des alten Notenberechners zu ändern aber ich hab da nicht mehr durch geblickt... :(

MfG
Saban
 
Kommt halt drauf an, wie deine Oberfläche aufgebaut ist.

Du brauchst dir die Koordinaten aber nicht zu speichern, wenn du das mit dem Null-Layout machst. Jede Komponente kennt ja ihre Position.

Wenn du jetzt einen LayoutManager nutzen möchtest, solltest du dir vielleicht mal das FlowLayout anschauen.

MFG

Sascha
 
Erst mal Danke! für deine Posts.
Ich schau mir des alles daheim mal in Ruhe an... Falls ich fragen hab dann kann ich ja das Thema nochmal öffnen :) ich hoff du stehst mir dann wieder so hilfreich zur Seite :D

Edit:
Ich habe die Koordinaten nicht abgespeichert sondern hatte Variablen die ich in den Schleifen benutzt habe

z. B.
Java:
for(int index = 0; index < TextfeldArray.length(); index++){
TextfeldArray[index].setBounds(x, y, breite, höhe);
x = x + 25;
}

dafür habe ich die Variablen benutzt. Ich hoffe dies war jetzt nachvollziehbar wozu ich die Variablen erzeugt habe.


MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Es ist eigentlich ganz einfach: Benutze einen Layoutmanager und teile Java die Constraints (Einschränkungen) mit an die sich das Layout zu halten hat und alles wird automatisch auch bei größenänderungen während der Laufzeit automatisch so gesetzt wie man es einmal mit sehr wenig Code definiert hat.

Ein null-Layout sagt es eigentlich schon... es ist kein Layout. In dem Fall bist DU selbst der Layoutmanger und mußt dich mit deinem Code darum kümmern das alles an der richtigen Stelle ist. Man kann sicher nicht immer alles mit einem einzigen Layout hinkriegen aber dafür kann man alles in geeignete Teilkomponenten (eigenen Panels) aufteilen und die einzeln Layouten. Wenn man das noch in eigene Klassen aufteilt (oder zumindest eigene Methoden) wirds auch ein wenig übersichtlicher.

Aber viel hat bei Oberflächenentwicklung auch mit Erfahrung zu tun... und die kommt halt irgendwann ;)
 
Zurück