Erro ao posicioar os itens centralizados dentro de um JPanel

Olá, eu gostaria da ajuda de vocês para resolver o meu problema atual.
O problema é: eu gostaria de utilizar um Layout para que os meus itens dentro do JPanel ficassem
centralizados e um abaixo do outro, para que quando o usuario selecionase o botao de ‘MAXIMIZAR’,
os itens não ficassem destorcidos.

Então esse seria a parte do com problema:

GradientPanel panelPrincipal = new GradientPanel(Color.CYAN, Color.PINK);
panelPrincipal.setBackground(new Color(0, 0, 0, 0));
panelPrincipal.setAlignmentX(SwingConstants.CENTER);
contentPane.add(panelPrincipal, BorderLayout.CENTER);
GridBagLayout gbl_panelPrincipal = new GridBagLayout();
gbl_panelPrincipal.columnWidths = new int[] { 0, 0, 0 };
gbl_panelPrincipal.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
gbl_panelPrincipal.rowHeights = new int[] { 0, 0, 0, 0, 0, 0, 0, 0 };
panelPrincipal.setLayout(gbl_panelPrincipal);

	JLabel labelNome = new JLabel("USERNAME", SwingConstants.CENTER);
	labelNome.setHorizontalTextPosition(SwingConstants.CENTER);
	labelNome.setForeground(Color.BLACK);
	labelNome.setFont(new Font("Simplified Arabic", Font.BOLD, 14));
	labelNome.setHorizontalAlignment(SwingConstants.CENTER);
	GridBagConstraints gbc_labelNome = new GridBagConstraints();
	gbc_labelNome.insets = new Insets(0, 0, 5, 0);
	gbc_labelNome.gridx = 2;
	gbc_labelNome.gridy = 0;
	panelPrincipal.add(labelNome, gbc_labelNome);

	JFormattedTextField textNome = new JFormattedTextField();
	textNome.setFont(new Font("Tahoma", Font.BOLD, 12));
	textNome.setForeground(Color.BLACK);
	textNome.setOpaque(false);
	textNome.setColumns(20);
	textNome.setVisible(true);
	textNome.setBorder(null);
	textNome.setHorizontalAlignment(SwingConstants.CENTER);
	GridBagConstraints gbc_textNome = new GridBagConstraints();
	gbc_textNome.insets = new Insets(0, 0, 5, 0);
	gbc_textNome.gridx = 2;
	gbc_textNome.gridy = 1;
	panelPrincipal.add(textNome, gbc_textNome);
	textNome.grabFocus();

	// -------------------- LISTENER TEXT NOME --------------------
	textNome.addKeyListener(new KeyAdapter() {
		public void keyTyped(java.awt.event.KeyEvent e) {
			// VALIDATE EACH CHARACTER TYPED
			String caracteresInvalidos = "0987654321'\"!@#$%¨&*()_-=+§ªº°;´`~^;:><?/\\|.[]{},";
			if (caracteresInvalidos.contains(e.getKeyChar() + "")) {
				e.consume();
			}
		}

		// CLOSE WINDOW
		public void keyPressed(KeyEvent e) {
			int key = e.getKeyCode();
			if (key == 27) {
				System.exit(0);
			}
		}
	});

	JSeparator separator = new JSeparator();
	separator.setForeground(Color.BLACK);
	separator.setBackground(Color.BLACK);
	separator.setVisible(true);
	GridBagConstraints gbc_separator = new GridBagConstraints();
	gbc_separator.insets = new Insets(0, 0, 5, 0);
	gbc_separator.gridx = 2;
	gbc_separator.gridy = 2;
	panelPrincipal.add(separator, gbc_separator);

	// -------------------- SEPARATOR TEXT NOME --------------------
	JLabel labelSenha = new JLabel("PASSWORD");
	labelSenha.setHorizontalTextPosition(SwingConstants.CENTER);
	labelSenha.setHorizontalAlignment(SwingConstants.CENTER);
	labelSenha.setForeground(Color.BLACK);
	labelSenha.setFont(new Font("Simplified Arabic", Font.BOLD, 14));
	GridBagConstraints gbc_labelSenha = new GridBagConstraints();
	gbc_labelSenha.insets = new Insets(0, 0, 5, 0);
	gbc_labelSenha.gridx = 2;
	gbc_labelSenha.gridy = 3;
	panelPrincipal.add(labelSenha, gbc_labelSenha);

	// -------------------- LISTENNER BOTAO LOGIN --------------------
	JButton botaoLogin = new JButton("LOG IN");
	botaoLogin.addMouseListener(new MouseAdapter() {
		@Override
		public void mouseClicked(MouseEvent e) {
			String username = textNome.getText().trim();
			String password = new String(textSenha.getPassword());
			if (!username.toString().isEmpty()) {
				if (GerenciadorCliente.UsernameExists(username)) {
					List<Cliente> listaClientes = GerenciadorCliente.consultaTodosClientes();
					boolean existe = false;

					for (int id = 0; id < listaClientes.size(); id++) {
						Cliente cliente = listaClientes.get(id);
						if (cliente.getPass().equals(password)) {
							existe = true;
							break;
						}
					}

					if (existe) {
						GerenciadorCliente.clear(textNome);
						GerenciadorCliente.clear(textSenha);
						aviso = new Notification("Bem vindo(a) " + username);
						// ABRIR NOVA TELA
					} else {
						GerenciadorCliente.clear(textSenha);
						System.out.println(password);
						JOptionPane.showMessageDialog(Home.this,
								"Não foi possivel encontrar uma senha compativel com o usuário: \"" + username
										+ "\".");
					}
				} else if (GerenciadorFuncionario.UsernameExists(username)) {
					List<Funcionario> listaFfuncionarios = GerenciadorFuncionario.consultaTodosFuncionarios();
					boolean existe = false;

					for (int id = 0; id < listaFfuncionarios.size(); id++) {
						Funcionario funcionario = listaFfuncionarios.get(id);
						// if (funcionario.getp) {

						// }
					}
				} else {
					JOptionPane.showMessageDialog(null, "O username inserido não existe no banco");
				}
			} else {
				if (aviso != null) {
					aviso.dispose();
				}
				aviso = new Notification("O nome não pode estar vazio");
				aviso.addKeyListener(new KeyAdapter() {
					public void keyPressed(KeyEvent e) {
						if (e.getKeyCode() == 27) {
							aviso.dispose();
							textNome.grabFocus();
						}
					}
				});
			}
		}
	});

	// -------------------- PASSWORD TEXT SENHA --------------------
	textSenha = new JPasswordField();
	textSenha.setHorizontalAlignment(SwingConstants.CENTER);
	textSenha.setFont(new Font("Tahoma", Font.BOLD, 12));
	textSenha.setEchoChar('*');
	textSenha.setForeground(Color.BLACK);
	textSenha.setOpaque(false);
	textSenha.setVisible(true);
	textSenha.setColumns(20);
	GridBagConstraints gbc_textSenha = new GridBagConstraints();
	gbc_textSenha.insets = new Insets(0, 0, 5, 0);
	gbc_textSenha.gridx = 2;
	gbc_textSenha.gridy = 4;
	panelPrincipal.add(textSenha, gbc_textSenha);

	// -------------------- LISTENER TEXT SENHA --------------------
	textSenha.addKeyListener(new KeyAdapter() {
		public void keyTyped(java.awt.event.KeyEvent e) {
			// VALIDAR CADA CARACTER DIGITADO
			String caracteresInvalidos = "'\"!@#$%¨&*()_-=+§ªº°;´`~^;:><?/\\|.[]{},";
			if (caracteresInvalidos.contains(e.getKeyChar() + "")) {
				e.consume();
			}
		}
	});

	botaoLogin.setIcon(null);
	botaoLogin.setBackground(Color.BLACK);
	botaoLogin.setForeground(Color.WHITE);
	botaoLogin.setBorder(null);
	GridBagConstraints gbc_botaoLogin = new GridBagConstraints();
	gbc_botaoLogin.insets = new Insets(0, 0, 5, 0);
	gbc_botaoLogin.gridx = 2;
	gbc_botaoLogin.gridy = 5;
	panelPrincipal.add(botaoLogin, gbc_botaoLogin);

	JSeparator separator_1 = new JSeparator();
	separator_1.setForeground(Color.BLACK);
	separator_1.setBackground(Color.BLACK);
	GridBagConstraints gbc_separator_1 = new GridBagConstraints();
	gbc_separator_1.insets = new Insets(0, 0, 5, 0);
	gbc_separator_1.gridx = 2;
	gbc_separator_1.gridy = 6;
	panelPrincipal.add(separator_1, gbc_separator_1);
	botaoCadastrar.setSelectedIcon(null);

	botaoCadastrar.setForeground(Color.RED);
	botaoCadastrar.setOpaque(false);
	botaoCadastrar.setBorder(null);
	botaoCadastrar.setBackground(new Color(0, 0, 0, 0));
	botaoCadastrar.setFocusable(false);
	GridBagConstraints gbc_botaoCadastrar = new GridBagConstraints();
	gbc_botaoCadastrar.gridx = 2;
	gbc_botaoCadastrar.gridy = 7;
	panelPrincipal.add(botaoCadastrar, gbc_botaoCadastrar);

BOM, O OBJETIVO SERIA ESTE:

Print

MAS INFELISMENTE O MAXIMO QUE CONSEGUI FOI ISTO:

Print2