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:
publicChat(String fensterTitel ){//super( fensterTitel );
hinweis =newLabel("Text eingeben und mit Return abschliessen");
eingabe =newTextField();
ausgabe =newTextArea();
userliste =newTextArea();
ausgabe.setPreferredSize(newDimension(500,500));//hier ein versuch //Panels erzeugenJPanel panelButton =newJPanel(newGridLayout(1,2));
panelButton.setPreferredSize(newDimension(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(newActionListener(){publicvoidactionPerformed(ActionEvent ev ){sendText();}});addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvent ev ){getWebsite(website +"chat.php?mode=logout");dispose();System.exit(0);}});
ausgabe.setEditable(false);
userliste.setEditable(false);
userliste.setSize(100,100);//hier ein versuchthis.setPreferredSize(newDimension(500,500));//hier ein versuch//ausgabe.login();}
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.
@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.
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.