GUI - Größe nicht änderbar

kizu

Mitglied
Hallo,
Ich habe hier ein Fenster mit einem Ausgabetextfeld für Chatzeilen. daneben soll eine Userliste erscheinen. nur ist mein Problem, dass die Userliste kleiner sein soll., als das ausgabefenster, nur egal was ich versuche, weder das Fenster, noch die einzelnen Bereiche ihre Größe verändern.

kann mir jemand helfen?

Java:
	  public Chat( String fensterTitel )
	  {
	    //super( fensterTitel );
	    hinweis = new Label( "Text eingeben und mit Return abschliessen" );
	    eingabe = new TextField();
	    ausgabe = new TextArea();
	    userliste = new TextArea();
	    ausgabe.setPreferredSize(new Dimension(500, 500));  //hier ein versuch        
	    //Panels erzeugen
        JPanel panelButton = new JPanel(new GridLayout(1,2));
        panelButton.setPreferredSize(new Dimension(500, 500)); //hier ein versuch
	    
	    //add( BorderLayout.EAST,  userliste );
	    add( eingabe,  BorderLayout.SOUTH);
	    add( hinweis, BorderLayout.NORTH);
	    add( panelButton , BorderLayout.CENTER);
	    
	    panelButton.add(ausgabe);
	    panelButton.add(userliste);
	    //panelButton.
	    
	    eingabe.addActionListener(
	      new ActionListener() {
	        public void actionPerformed( ActionEvent ev ) {
	          sendText(); } } );
	    addWindowListener(
	      new WindowAdapter() {
	        public void windowClosing( WindowEvent ev ) {
	        	getWebsite(website + "chat.php?mode=logout");
	        	dispose();
	        	System.exit( 0 ); } } );
	    ausgabe.setEditable(false);
	    userliste.setEditable(false);
	    userliste.setSize(100, 100);                              //hier ein versuch
	    this.setPreferredSize(new Dimension(500, 500)); //hier ein versuch
	    //ausgabe.
	    login();
	  }
 
Probier mal validate() . Ansonsten verwendet man normalerweise einen Layoutmanager. Sagt dir das was?


Edit: Sehe, dass du BorderLayout und GridbagLayout irgendwie mixt/verwendest. Sieht für mich allerdings komisch aus.
 
Zuletzt bearbeitet:
Also ich benutz meist für sowas alle 4 Methoden um die Größe zu setzen
Bsp:
Java:
Dimension d = new Dimension(500,500);
JPanel panel = new JPanel();
panel.setSize(d);
panel.setMinimumSize(d);
panel.setMaximumSize(d);
panel.setPreferredSize(d);

im Normalfall klappt das ganz gut. Aus irgendwelchen Gründen funktioniert setSize() und/oder setPreferredSize() alleine manchmal einfach nicht.
 
Hallo,

schau dir mal folgenden Link an: Lesson: Laying Out Components Within a Container (The Java™ Tutorials > Creating a GUI With JFC/Swing)

Da werden die verschiedenen Layoutmanager vorgestellt und erklärt, wie diese zu handhaben sind.

MfG
hansmueller

Stimmt an die "netten" LayoutManager hab ich nicht mehr gedacht. Die zerstückeln gerne mal das was man sich ausgedacht hat.
Deswegen verschachtel ich immer verschiedene Panels um dem aus dem Weg zu gehen 😀

Um es kurz zu sagen, bei BorderLayout und GridLayout wie du Sie verwendest, kannst du noch so oft eine Größe angeben .- es wird nicht viel bringen, da diese beiden Layouts die Komponenten so oder so noch nachträglich in der Größe ändern und anpassen. Lies dir den Link von hansmueller an. Da sollte es ganz gut beschrieben stehen. Ich mag die Tutorials von der Seite 🙂 Allerdings sollte man recht gut englisch verstehen.
 
Also deinen Code habe ich nicht gelesen, aber ich glaube du willst einfach wissen wie du eine GUI designst.
Dabei sollte man einen LayoutManager verwenden damit die alles flexibel veränderbar ist (hast du gemacht). Beim BorderLayout ordnet sich alles an den Rändern und in der mitte des Frames an.
Die Größen werden einfach so gesetzt wie es die Objekte wollen ( da ist meines wissens auch nciht viel zu machen). Ich empfehle dir das GridLayout. Dabei kannst du einfach dein Frame in ein Koordinatensystem einteilen und auch Verhältnisse angeben.

Java:
JFrame frame = new JFrame("GBL");
frame.setLayout(new GridBagLayout());

GridBagConstrains labelGBC = new GridBagConstrains();
labelGBC.x = 0;
labelGBC.y = 0;
labelGBC.width = 1;
labelGBC.height = 1;

JLabel l = new JLabel("Label1");
frame.add(l, labelGBC);

GridBagConstrains label2GBC = new GridBagConstrains();
label2GBC.x = 1;
label2GBC.y = 0;
label2GBC.width = 2;
label2GBC.height = 1;
JLabel l2 = new JLabel("Label2")
frame.add(l2, label2GBC);

Code ist nicht getestet! Aber das sollte funken🙂
 
Danke erstmal für die vielen Antworten.

@Blakh: Ich habe in der Schule, als wir mit Python gearbeitet haben es so gelernt, dass man verschiedene Layouts ineinander verschachtelt. Dachte das wäre normal.

Layoutmanager, also WYSIWYG-Editoren? naja. da habe ich beim Webdesign schon genügend schlechte Ehrfarungen gemacht. Wäre eine Notlösung.

@Mofi und hansmueller: Hab ich mir mal angesehen. Hab aber bei den beiden Layoutmanagern, also Border-Layout und Grid-Bag-Layout, nichts gefunden was auf die Größe hinweist, außer ich möchte irgendwie verschachteln. Das wird da ja erklärt. Aber zur reinen Breiten und Höhenangaben finde ich da nichts. Muss ich das jetzt komplett neu und anders angehen?

@JuniorInformat.: Nein. Wie ich eine grundlegend GUI designe weiß ich bereits. Und dein Code würde mir dabei auch nicht helfen 😉
GridBagConstrains hab ich übrigends auch schon ausprobiert.
 
kizu hat gesagt.:
nur ist mein Problem, dass die Userliste kleiner sein soll., als das ausgabefenster, nur egal was ich versuche, weder das Fenster, noch die einzelnen Bereiche ihre Größe verändern.

Ich habe mal einen kurzen Blick auf deinen Code geworfen. "ausgabe" und "userlist" fügst du in ein "panelButton" ein, welches eine GridLayout hat. Dieses "panelButton" wird dann vermutlich in ein Frame mit einem BorderLayout im Center eingefügt.

Das GridLayout gibt jeder seiner Zellen die gleiche Größe. Es orientiert sich da immer an der größten Komponente innerhalb des GridLayouts. Alle Komponenten werden an die Zellengröße angepaßt.
Die "userlist" kann also niemals kleiner sein als die "ausgabe" werden.
Du solltest dir dein Benutzeroberflächen-Konzept mal aufzeichnen und dann ganz genau überlegen, mit welchen Layoutmanagern du dieses Konzept umsetzen kannst.

Vielleicht solltest du dich mit der Thematik "Liquid-Layout" bzw. "Fluid-Layout" etwas beschäftigen.
Manche gewünschten Effekte bei der GUI-Gestaltung erreicht man nur, wenn man verschiedene Layoutmanager verschachtelt. Aber dazu muß man ganz genau wissen, wie sich jeder Manager genau verhält.

Wenn das alles nicht hilft, kannst du es ja so machen: Doing Without a Layout Manager (Absolute Positioning) (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)
Ist aber nicht schön und sollte eigendlich nur für spezielle Sonderfälle angewandt werden.

MfG
hansmueller
 

Neue Themen


Zurück
Oben