Problem mit JFrame

henpara

Bekanntes Mitglied
Hallo zusammen,
ich bin ziemlich neu mit dem Programmieren und ein Problem.

Ich möchte eigentlich einfach erstmal ein Frame erstellen, in das ich gewissen Buttons/Texte hineinbekommen möchte.

Bei mir erscheint, wenn ich über .add() buttons und texte ans Frame schicken auf dem Frame IMMER nur der zuletzt geaddete button/text. die anderen vorher geaddeten werden gelöscht?!

hier mein Beispielcode:

Java:
import javax.swing.*;
import java.awt.*;

//Klasse für das Loginfenster.
//Ausgabe soll ALT oder CTS, username und Passwort sein.
public class Login1 extends JFrame {
	
	static JFrame Frame;
	JLabel Usertxt, PWtxt;
	JPanel panel1, panel2, panel3;
	JComboBox AltCts;
	JTextField Username;
	JPasswordField Password;
	
	public void doLogin(){
		String[] altcts={"ALT","CTS"};
		Frame = new JFrame("Login");
		Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Frame.getLayout();
		Usertxt = new JLabel("Please enter your username:");
		//Usertxt.setBounds(23, 23, 23, 23);
		PWtxt = new JLabel("Please enter your password:");
		Username = new JTextField(10);
		Password = new JPasswordField(10);
		AltCts = new JComboBox(altcts);
		panel1 = new JPanel();
		panel2 = new JPanel();
		panel3 = new JPanel();
		
		panel1.add(AltCts);
		panel2.add(Usertxt);
		panel2.add(Username);
		panel3.add(PWtxt);
		panel3.add(Password);
		Frame.getContentPane().add( panel1);
		Frame.getContentPane().add( panel2);
		Frame.getContentPane().add( panel3);
		//Frame.add(Usertxt);
		//Frame.add(PWtxt);
		
		Frame.setSize(400, 300);
		Frame.setLocation(400,300); 
		Frame.setVisible(true);
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//
		Login1 aLogin1 = new Login1();
		aLogin1.doLogin();
				System.out.println("bu");
	}
}

Würde mich freuen, wenn mir jemand sagen kann, wo mein Denkfehler ist.
mfG
henpara

€ bitte keine verweise auf das Inselbuch oÄ, da hab ich schon gesucht und keine Antwort gefunden.
 
Ändere mal das Layout von dem Contentpane, oder benutze noch ein zusätzliches Panel, wo du dann die anderen drei hinzufügst..
p.s.: du erweiterst JFrame doch schon, wieso dann nochmal new JFrame() ...und Variablen werden nicht groß geschrieben.
 
Ah, klassische Einsteigersache 😉
Um mit GUIs zu arbeiten, muss man auch die Layout-Manager verstehen. Hier ist ein Tutorial von vielen.

Bei dir ist es so, dass ein JFrame per default ein BorderLayout hat. Wenn du nur
Code:
add()
aufrufst, wird immer in den CENTER-Bereich gelegt. D.h. natürlich dass die vorherige Komponente überschrieben wird.
Probier einmal folgendes:
Java:
Frame.getContentPane().add( panel1, BorderLayout.CENTER );
Frame.getContentPane().add( panel2, BorderLayout.NORTH );
Frame.getContentPane().add( panel3, BorderLayout.EAST );

...auf den Code selbst will ich erstmal nich eingehen ;(
 
Hallo,

das liegt daran, dass der nichtvorhandene Layoutmanager die hinzugefügen Panels immer übereinander packt.

Und jeder Button in einem anderen Panel ist, das jeweils von dem anderen überdeckt wird,

Schaue nach "LayoutManager"

Gruß,

Marcinek
 
weee, vielen dank!

Sieht zwar immernoch scheiße aus von der Anordung, aber immerhin sehe ich alles 😉

€ hab mich schon mit LayoutManagern befasst, da stand aber halt nirgends, daß der panels, die auch gleiche positionen gestellt werden einfach überschreibt, dachte, daß er eben "automatisch" alles anzeigt, was drauf gepackt wird.
trotzdem danke für die schnellen antworten!
 
Versuch mal, deine einzelnen Panels in ein großes mit vorgeschriebenem Layout zu packen (z.B. GridLayout oder BorderLayout)

So zum Beispiel:
Java:
        JPanel superPanel = new JPanel(new GridLayout(5, 1));
        
        superPanel.add(AltCts);
        superPanel.add(Usertxt);
        superPanel.add(Username);
        superPanel.add(PWtxt);
        superPanel.add(Password);

        Frame.getContentPane().add(superPanel);
 
@Zyfor: danke, hilft schonmal viel! Jetzt muss ich nur noch die TextField-Formatierung innerhalb des Panels hinkriegen, dann ist das schon so wie ich es mir vorstelle (zZ sind die Textfields viel zu groß)

ich hab auch mit einem 2x2 Grid gearbeitet, damit es wie folgt aussieht:

username: "textfeld"

password: "passwordfeld"


mfg und thx für die hilfen!
 

Neue Themen


Zurück
Oben