I am using BoxLayout to position GUI elements of my Server GUI. I am having a weird thing happening with my JLabels. I was wondering why when I append a string to my JTextArea, the JLabels moves from their original locations. So the first figure is the JLabels in the correct positions. The second image is the JLabels skewed
Figure 1
Figure 2
Below is the code for the Server GUI
GUI.java
package serverGUI;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class GUI extends JFrame{
public JTextArea serverInfo;
public JButton serverRunningState;
public JLabel serverConnectionStatus = new JLabel(GUIConfig.DEFAULT_SERVER_STATUS);
public JLabel serverInfoLabel = new JLabel(GUIConfig.DEFAULT_SERVER_EVENT_LABEL);
public GUI(){
super("Yahtzee Game Server");
//set the server online/off-line status to default color
serverConnectionStatus.setForeground(GUIConfig.DEFAULT_SERVER_STATUS_COLOR);
//create the server events text area. It will hold all info
//about server events including client connections/disconnections
serverInfo = new JTextArea();
serverInfo.setEditable(false);
serverInfo.setPreferredSize(new Dimension(350, 450));
//create the connect/disconnect button. Will be connect when server
//is not connected and disconnect when server is connected
serverRunningState = new JButton();
serverRunningState.setText("Run Server");
//Create JPanel with box layout
JPanel guiPanel = new JPanel();
guiPanel.setLayout(new BoxLayout(guiPanel, BoxLayout.PAGE_AXIS));
//add components to panel
guiPanel.add(serverInfoLabel);
guiPanel.add(Box.createRigidArea(new Dimension(0,5)));
guiPanel.add(serverInfo);
guiPanel.add(Box.createRigidArea(new Dimension(0,5)));
guiPanel.add(serverConnectionStatus);
//create a bit of space around components so they get away from edges
guiPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
//add panel to frame
add(guiPanel, BorderLayout.CENTER);
//create new panel for buttons
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.PAGE_AXIS));
//add connection button
serverRunningState.setAlignmentX(Component.CENTER_ALIGNMENT);
buttonPanel.add(serverRunningState);
buttonPanel.add(Box.createRigidArea(new Dimension(0,5)));
//add panel to frame
add(buttonPanel, BorderLayout.SOUTH);
//set size, do not allow resize and show
setSize(GUIConfig.DEFAULT_FRAME_WIDTH, GUIConfig.DEFUALT_FRAME_HEIGHT);
setResizable(false);
setVisible(true);
//set it to terminate frame on exit
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String args[]) {
GUI g = new GUI();
}
}
ActionListener Code (ServerController.java):
package serverController;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import serverGUI.GUI;
import serverModel.AppServer;
import serverModel.Config;
public class ServerController {
public AppServer server;
public GUI serverGUI;
public ServerController() {
super();
//create the view and add an action listener to know when run server
//button is pressed
serverGUI = new GUI();
//add action listener on run server button
serverGUI.serverRunningState.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
//start server and disable run server button. change its text to server running
server = new AppServer(Config.DEFAULT_PORT);
if(server.isRunning() == true){
serverGUI.serverRunningState.setEnabled(false);
serverGUI.serverRunningState.setText("Server Running");
serverGUI.serverInfo.append("Server started!\nWaiting for new clients...\n\n");
serverGUI.serverInfo.setLineWrap(true);
//change JLabel to "Server Online" from "Server Off-line"
serverGUI.serverConnectionStatus.setText("Server Online");
serverGUI.serverConnectionStatus.setForeground(Color.GREEN);
}
}
});
}
public void updateServerEventLog() {}
private void checkServerStatus(AppServer s) {
}
public static void main(String args[]) {
ServerController sController = new ServerController();
}
}