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.
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):
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.
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();
}
}