JList "springt"

Z

ZwEnN

Gast
Hallo leute,
ich bin gerade dabei für die Schule ein kleines Chatprogramm zu schreiben.
Ich weiß dass ich das Rad neu erfinde aber für mich geht es hier um den Lerneffekt. :D

Da ist aber ein leichter Schönheitsfehler in dem GUI da nämlich die JList "springt" wenn man das Fenster verkleinert.
Ich habe keine Ahnung woran das liegt... hab schon alles mögliche versucht aber es geht nich weg :/ vllt könnt ihr mir ja helfen.

Wäre auch schön wenn ihr etwas zum code allgemein sagen könntet ich versuche nämlich gerade meinen Programmierstil zu verbessern damit nichtmehr alles so chaotisch aussieht und übersichtlicher wird...

Hier der code (so angepasst dass er mit copy und paste zum ausprobieren läuft):
Java:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JMenuBar;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.text.StyledDocument;

class WindowBuilder {
	
	private static JFrame
	window;
	
	/*################## MainWindow ##################
	 */
		
		static StyledDocument startMainWindow(ActionListener listener) {
			
			setMainWindowProperties(listener);
			
			Container content = window.getContentPane();
			content.setLayout(new GridBagLayout());
			
			makeBar(content,listener);
			
			StyledDocument doc =
			makeChatLog(content);
			
			makeUserlist(content,listener);
			
			makeInput(content,listener);
			
			window.pack();
			window.setVisible(true);
			return doc;
		}
	
		private static void setMainWindowProperties(ActionListener listener) {
			
			window.setTitle("Simple Chat");
			window.setLocation(300, 300);
			window.setMinimumSize(new Dimension(350,250));
			

		}
		//----------------Input----------------
			private static void makeInput(Container content, ActionListener listener){
				
				JTextField input = new JTextField();
				addInputField(input,content);
				
				JButton sendButton = createButton("Senden","send",listener);
				addInputButton(sendButton,content);
				
			}
			private static void addInputField(JTextField input, Container content){
				GridBagConstraints cons = new GridBagConstraints();
				
				cons.insets = new Insets(0,5,0,5);
				
				cons.gridwidth = GridBagConstraints.RELATIVE;
				cons.gridheight = GridBagConstraints.REMAINDER;
				
				cons.fill = GridBagConstraints.HORIZONTAL;
				cons.weightx = 1.0;
				
				content.add(input,cons);
			}
			private static void addInputButton(JButton button, Container content){
				GridBagConstraints cons = new GridBagConstraints();
				
				//Der button soll nicht direkt am Eingabefeld hängen.
				//Außerdem soll nach oben und unten ein bisschen Abstand sein
				//damit es besser aussieht.
				cons.insets = new Insets(3,5,3,5);
				
				cons.gridheight = GridBagConstraints.REMAINDER;
				cons.gridwidth = GridBagConstraints.REMAINDER;
				
				cons.anchor = GridBagConstraints.WEST;
				
				content.add(button,cons);
			}
		//---------------*Input*---------------

		//----------------Userlist----------------
			private static void makeUserlist(Container content,ActionListener listener){
				
				DefaultListModel listModel = new DefaultListModel();
				
				//Erstellen einer Scroll pane bestehend aus der JList mit dem listModel
				JScrollPane userList = new JScrollPane(new JList(listModel));
				userList.setPreferredSize(new Dimension(75,300));
				
				addUserlist(userList, content);
			}
			private static void addUserlist(JScrollPane userList, Container content){
				GridBagConstraints cons = new GridBagConstraints();
				
				//Die Userliste ist das letzte element in ihrer Reihe
				cons.gridwidth = GridBagConstraints.REMAINDER;
				
				cons.fill = GridBagConstraints.BOTH;
				//Soll sich zusammen mit dem Chatlog nach links oder rechts erweitern
				cons.weightx = 0.2;
				//Soll sich wie der Chatlog komplett nach oben oder unten erweitern
				cons.weighty = 1.0;
				
				content.add(userList,cons);
			}
			
			
		//---------------*Userlist*---------------
		
		//----------------ChatLog----------------
			private static StyledDocument makeChatLog(Container content){
				JTextPane textPane = new JTextPane();
				textPane.setEditable(false);
				
				JScrollPane scrollPane = new JScrollPane(textPane);
				scrollPane.setPreferredSize(new Dimension(300,300));
				
				addChatLog(scrollPane, content);
				
				return textPane.getStyledDocument();
			}
			private static void addChatLog(JScrollPane scrollPane, Container content){
				
				GridBagConstraints cons = new GridBagConstraints();

				cons.gridwidth = GridBagConstraints.RELATIVE;
				
				cons.fill = GridBagConstraints.BOTH;
				//Soll sich zusammen mit der Userliste nach links oder rechts erweitern
				cons.weightx = 0.8;
				//Soll sich wie die Userliste komplett nach oben oder unten erweitern
				cons.weighty = 1.0;
				
				content.add(scrollPane,cons);
			}
		//---------------*ChatLog*---------------
		
		//----------------Bar----------------
			private static void makeBar(Container content,ActionListener listener){
				JMenuBar bar = new JMenuBar();
				bar.setLayout(new FlowLayout(FlowLayout.LEFT));
				
				JButton button;
				
				button = createButton("Verbinden","bar.connect",listener);
				bar.add(button);
				
				button = createButton("Trennen","bar.disconnect",listener);
				bar.add(button);
				
				button = createButton("Schrift","bar.style",listener);
				bar.add(button);
				
				button = createButton("Name","bar.name",listener);
				bar.add(button);
				
				addBar(bar,content);
				
			}
			private static void addBar(JMenuBar bar, Container content){
				GridBagConstraints cons = new GridBagConstraints();
				
				//Die Leiste ist das einzige und damit auch letzte element in ihrer Reihe
				cons.gridwidth = GridBagConstraints.REMAINDER;
				cons.gridheight = 1;
				
				cons.fill = GridBagConstraints.HORIZONTAL;
				cons.weightx = 1.0;

				content.add(bar,cons);
			}
		//---------------*Bar*---------------
		
	//################# *MainWindow* #################
	public static void main(String args[]){
		startMainWindow(null);
	}
	private static JButton createButton(String title, String actionCommand, ActionListener listener){
		
		JButton button = new JButton(title);
		button.setActionCommand(actionCommand);
		if(listener != null)
			button.addActionListener(listener);
		
		return button;
	}
	static{
		window = new JFrame();
	}
}
 
Z

ZwEnN

Gast
Weiß es keiner oder ist die Frage einfach so dumm, dass keiner antworten will?
Würde mich bitte Jemand aufklären?
 

klein-odd

Aktives Mitglied
Dumme Fragen gibt's angeblich nicht.

Das, was Du als "Springen" bezeichnest,
kann vielleicht daran liegen, dass das Fenster (hier : JFrame) nach jeder Bewegung
neu gezeichnet wird, ohne dass Du es im Programm vorschreibst.

Alles wird beim Bewegen des Fensters von vorn neu gezeichnet und auf die Position gebracht.

Wenn Du Spass an Experimenten hast, kannst Du mit verschiedenen Layout- Managern versuchen.

Gruss,
 
Zuletzt bearbeitet:
Z

ZwEnN

Gast
Es passiert aber komischerweise nur, wenn man das Fenster verkleinert und nicht wenn man es vergrößtert.
Die anderen Layoutmanager eignen sich meiner Meinung nach nicht um das Fenster so hinzubekommen.
Wenn es nicht weggeht, muss ich wohl damit leben. :D
Schadet ja zum dem Programm nicht... ärgert mich aber ein bisschen. :/
 

Ebenius

Top Contributor
Das liegt daran, dass das GridBagLayout sich nach der MinimumSize aller Kinder des auszulegenden Containers richtet, sobald nicht mehr alle Kinder mit PreferredSize (Höhe oder Breite, eines reicht schon) auf den Container passen. Siehe dazu: http://www.java-forum.org/bilder-gui-damit-zusammenhaengt/64702-gridbaglayout.html#post544790 (besonders das Beispiel).

In Deinem Fall sollte es also helfen, wenn Du der Liste eine anständige MinimumSize (nämlich genau die gleiche wie die PreferredSize) gibst. Probier's mal aus.

Ebenius
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C getSelectedRow() springt bei JButton-Auswahl nicht weiter mit Frameworks - Spring, Play, Blade, Vaadin & Co 16
G HILFE Dringend switch case springt nicht raus Frameworks - Spring, Play, Blade, Vaadin & Co 23
L Mauszeiger springt in obere linke Ecke des JDialogs Frameworks - Spring, Play, Blade, Vaadin & Co 3
D Button springt aus Textbox Frameworks - Spring, Play, Blade, Vaadin & Co 2
A Debugger springt in andere Klassen Frameworks - Spring, Play, Blade, Vaadin & Co 14
K Figur Springt nicht Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Zeitmessung springt vorraus und funktioniert nicht! Frameworks - Spring, Play, Blade, Vaadin & Co 4
P Spieler im 2D-Spiel springt herum Frameworks - Spring, Play, Blade, Vaadin & Co 0
G JTable springt (JScrollPane, GridBagLayout) Frameworks - Spring, Play, Blade, Vaadin & Co 1
K TextWatcher springt nicht an Frameworks - Spring, Play, Blade, Vaadin & Co 9
T JTable + JScrollePane Größe "springt" beim resizen des Fensters Frameworks - Spring, Play, Blade, Vaadin & Co 4
engelsteufelin Taschenrechner springt an Start nach falscher Eingabe Frameworks - Spring, Play, Blade, Vaadin & Co 7
W Java Applet aus der Taskleiste springt in Vordergrund Frameworks - Spring, Play, Blade, Vaadin & Co 3
O Progressbar 'springt nicht an' Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Exception springt nicht in den catch- Block Frameworks - Spring, Play, Blade, Vaadin & Co 14
R Programm springt nicht in if Bedingung Frameworks - Spring, Play, Blade, Vaadin & Co 9
F Debugging springt nicht in Methode - liefert null Frameworks - Spring, Play, Blade, Vaadin & Co 2
C LWUIT: Scrollen der Form springt am Ende Frameworks - Spring, Play, Blade, Vaadin & Co 0
Haave Animation "springt" trotz Wartebefehl Frameworks - Spring, Play, Blade, Vaadin & Co 3
J Eclipse springt nicht mehr an. Frameworks - Spring, Play, Blade, Vaadin & Co 8
nrg Debugger springt immer in Java SE Code Frameworks - Spring, Play, Blade, Vaadin & Co 3
D Methode springt zwischen returns Frameworks - Spring, Play, Blade, Vaadin & Co 2
Balbes JComboBox springt af den ersten Wert zurück Frameworks - Spring, Play, Blade, Vaadin & Co 6

Ähnliche Java Themen

Neue Themen


Oben