Hi all,

I have a simple JFrame windows with two JLabel, two JTextField and two JButton. I use SpringLayout to display controls in on the frame. But when I run the application, the windows is displayed in a very small size. Only the two buttons are displayed. But when I maximize the window all the controls are placed properly.

So, I think, the setSize() is not functioning properly. Can someone please tell me what i am doing wrong? Appreciate your help. Here's the code for this:

public class Login extends JFrame implements ActionListener {
	public Login () {
		super("Title");
		this.getContentPane().setLayout(new BorderLayout());
		
		JPanel btnPane = new JPanel();
		btnPane.setLayout(new FlowLayout());
		
		JPanel pane = new JPanel();
		SpringLayout sp = new SpringLayout();
		pane.setLayout(sp);
		
		pane.add(lblUserName);
		pane.add(txtUserName);
		pane.add(lblPassword);
		pane.add(txtPassword);
		
        sp.putConstraint(SpringLayout.WEST, lblUserName, 70, SpringLayout.WEST, this);
        sp.putConstraint(SpringLayout.NORTH, lblUserName, 20, SpringLayout.NORTH, this);
        
        sp.putConstraint(SpringLayout.WEST, txtUserName, 5, SpringLayout.EAST, lblUserName);
        sp.putConstraint(SpringLayout.NORTH, txtUserName, 20, SpringLayout.NORTH, this);
        
        sp.putConstraint(SpringLayout.WEST, lblPassword, 70, SpringLayout.WEST, this);
        sp.putConstraint(SpringLayout.NORTH, lblPassword, 5, SpringLayout.SOUTH, lblUserName);
        
        sp.putConstraint(SpringLayout.WEST, txtPassword, 5, SpringLayout.EAST, lblPassword);
        sp.putConstraint(SpringLayout.NORTH, txtPassword, 5, SpringLayout.SOUTH, txtUserName);
        
    	btnLogin.addActionListener(this);
		btnCancel.addActionListener(this);
		
		btnPane.add(btnLogin);
		btnPane.add(btnCancel);
		
		this.getContentPane().add("Center", pane);
		this.getContentPane().add("South",btnPane);
		
	}
	public static void main (String[] args) {
		Login login = new Login();
		login.setSize(10, 20);
        login.setLocation(200,200);
		login.pack();
		login.setVisible(true);
	}
	public void actionPerformed(ActionEvent e) {
		// do some actions		
	}	
	private JLabel lblUserName = new JLabel("User name: ");
	private JTextField txtUserName = new JTextField(15);
	private JLabel lblPassword = new JLabel("Password : ");
	private JPasswordField txtPassword = new JPasswordField(15);
	
	private JButton btnLogin = new JButton("Login");
	private JButton btnCancel = new JButton("Cancel");
}

Thanks in advance...

That's what I thaught. But, no matter which number I try, I get the same size. I tried with setSize(200, 300); still the same size. So, I am thinking, I may be doing something wrong.

Please advise...

Get rid of the call to pack(). pack() resizes the components based on the preferred size of each component. So either setPreferredSize() and use pack, or leave your code like it is and do not use pack.

This article has been dead for over six months. Start a new discussion instead.