Frage zur Positionierung von Eingabefelder ?

Status
Nicht offen für weitere Antworten.

gustav-mega

Bekanntes Mitglied
Hallo,

ich habe 3 Eingabefelder, die so implementiert sind:

getContentPane().add(optionen1, BorderLayout.NORTH);
getContentPane().add(optionen2, BorderLayout.WEST);
getContentPane().add(optionen3, BorderLayout.EAST);

ich möchte aber, dass sie in der Mitte von dem unteren Bereich liegen, kann jemand mir vielleicht sagen, wie das geht?

Gruß,
G.M.
 
Mach dir 2 neue Panels. In das eine setzt du eine Emtpy Border von entsprechender größe, oder was
du da auch immer drin haben möchtest.
In das zweite Panel setzt du deine Felder.
Beide Panels mit BorderLayout in die ContentPane setzen und dann passts.
 
@Wildcard

vielleicht eine dumme Frage, aber ich weiss leider nicht wie Du das meinst, aber mein Code sieht wie folgt aus:
textfeld1 = new JTextField(5);

JPanel optionen1 = new JPanel();
optionen1.setLayout(new FlowLayout());
optionen1.add(new JLabel("ID:"));
optionen1.add(textfeld1);

textfeld2 = new JTextField(5);

JPanel optionenFrom = new JPanel();
optionen2.setLayout(new FlowLayout());
optionen2.add(new JLabel("Name:"));
optionen2.add(textfeld2);

textfeld3 = new JTextField(5);

JPanel optionen3 = new JPanel();
optionen3.setLayout(new FlowLayout());
optionen3.add(new JLabel("Nachname:"));
optionen3.add(textfeld3);



JPanel optionenR = new JPanel();
optionenR.add(new JButton("Anmelden"));
optionenR.add(new JButton("Abbrechen"));
getContentPane().add(optionen1, BorderLayout.NORTH);
getContentPane().add(optionen2, BorderLayout.WEST);
getContentPane().add(optionen3, BorderLayout.EAST);
getContentPane().add(optionenR, BorderLayout.SOUTH);

ich wäre dankbar, wenn Du mir sagen könntest, wie ich es bei diesem Code machen soll?

Gruß,
G.M.
 
Die ganzen Panels die du erstellt hast machst du in ein übergeordnetets Panel options.
dann machst du dir noch ein space Panel das nur aus einer Border besteht.

Code:
space.setBorder(BorderFactory.createEmptyBorder(100,100,100,100));

jetzt setzt du das space Panel in die ContentPane auf NORTH
und das options Panel auf SOUTH.
Je nachdem wie groß du die Border wählst bleibt dieser Raum in der ContentPane frei,
also liegt dein options Panel in der unteren Hälfte
 
Aber es geht doch nicht :?: ,

wenn ich panel1, panel2 und panel3 habe und möchte sie alle in einem Panel zusammenfassen, würde doch nicht so gehen:

panelZusammenfassen.add(panel1, panel2, panel3)

und das ist auch bestimmt falsch 😳

Gruß,
G.M.
 
add erwaretet aber nur ein panel:
http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Container.html#add(java.awt.Component)
 
So werden z.B. 3 Textfelder untereinander auf einem Panel zusammengefasst:

Code:
JPanel panel = new JPanel();
panel.setLayout( new GridLayout( 3, 1 ));

panel.add( new JTextField("oben") );
panel.add( new JTextField("mitte") );
panel.add( new JTextField("unten") );

Der LayoutManager "GridLayout" sorgt dafür, dass die Textfelder an der richtigen Position bleiben.
 
Hmm, aber so ist das Problem, dass wenn ich das Fenster maximiere, dann werden die Textfelder auch größer, und ich will, dass nur die Position immer unten ist aber die Größe soll sich nicht ändern.

Gruß,
G.M.
 
@Roar

das war genau mein Fehler, aber das Problem, was ich jetzt habe, ist dass wenn ich das Fenster vergrössere, vergrössern sich auch die Textfelder, aber wie gesagt, ich möchte, dass die Textfelder unten im Bildschirm zu sehen sind und auch nur einzeilig sind.

Gruß,
G.M.
 
Hoi,

Beni hat wie immer Recht 😉

Wenn Du verhindern willst, das die Textfelder dann größer werden,
packst Du diese vorher jeweils in ein JPanel mit FlowLayout.

Also so:
Code:
JPanel p1 = new JPanel(); 
JPanel p2 = new JPanel(); 
JPanel p3 = new JPanel(); 

p1.add(new JTextField("oben") );
p2.add(new JTextField("mitte") );
p3.add(new JTextField("unten") );

JPanel panel = new JPanel(); 
panel.setLayout( new GridLayout( 3, 1 )); 

panel.add( p1); 
panel.add( p2 ); 
panel.add( p3);

Alle erstellten Panels werden standardmäßig mit FlowLayout versehen.
Das braucht man also nich extra zu schreiben, wenn man Code sparen will.
Der Übersichtlichkeit halber sollte man dies jedoch immer tun.

greetz
SLi
 
@sliwalker

ich muss doch dann den panel Frame mit dem Befehl hinzufügen, oder?
Code:
getContentPane().add(panel, BorderLayout.SOUTH);
und bei mir wird nichts gezeigt :?:
 
ich glaube, jetzt habe ich es endlich kapiert, aber ich habe noch ein kleines Problem, nämlich die bide Textfelder stehen so wie erwüncht unten im Fenster, aber sie sind so lang wie das Fenster, wie könnte ich es zwingen, dass sie nur die Größe von 5 haben und mittig stehen?
Code:
    JPanel testometer = new JPanel();
    textfeldtest = new JTextField(5);    
    testometer.add(textfeldtest);
    textfeldtest2 = new JTextField(5);
    testometer.add(textfeldtest2);    
    testometer.setLayout( new GridLayout( 2, 1 , 0, 6));
    getContentPane().add(testometer, BorderLayout.SOUTH);

Gruß,
G.M.
 
Vielen Dank für die Hilfe und es tut mir leid, wenn ich zu viel dumme Fragen gestellt habe, aber kein einfaches und schon kompliziertes Thema.

Gruß,
G.M.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben