public PlayerPanel() {
		super(new User());
		
		setName("Player_Panel");

		setLayout(new BorderLayout(5, 5));

		// ////////////////////////////
		// Top Panel:
		// ////////////////////////////
		labelName = new JLabel("Name:");
		tfFirstName = new JTextField();
		tfLastName = new JTextField();

		labelID = new JLabel("User ID:");
		tfID = new JTextField();
		btnGenID = new JButton("Generate ID");

		labelWeekly = new JLabel("Weekly Pick:");
		cbWeeklyPick = new JComboBox<Contestant>();

		labelUltimate = new JLabel("Ultimate Pick:");
		cbUltPick = new JComboBox<Contestant>();
		
		labelPts = new JLabel("Current Points:");
		labelPtsValue = new JLabel("0");
		labelPtsValue.setHorizontalTextPosition(SwingConstants.RIGHT);

		personFields = new PlayerFieldsPanel(labelName, tfFirstName,
				tfLastName, labelID, tfID, btnGenID, labelWeekly, cbWeeklyPick,
				labelUltimate, cbUltPick, labelPts, labelPtsValue);
		// add the mouse listener to all components.
		for (Component c : ((JPanel)personFields).getComponents()) {
			//c.addMouseListener(this);
			if (c instanceof JTextField) {
				JTextField tf = (JTextField)c;
				tf.addKeyListener(new KeyListener() {

					@Override
					public void keyPressed(KeyEvent ke) {
						return;
					}

					@Override
					public void keyReleased(KeyEvent ke) {
						return;
					}

					@Override
					public void keyTyped(KeyEvent ke) {
						char key = ke.getKeyChar();
						if (Character.isLetterOrDigit(key)) {
							setFieldsChanged(true);
							btnSave.setEnabled(true);
						}
					}
					
				});
			} else if (c instanceof JComboBox) {
				c.addMouseListener(new MouseListener() {
					
					@Override
					public void mouseReleased(MouseEvent arg0) {
						return;
					}
					
					@Override
					public void mousePressed(MouseEvent arg0) {
						return;
					}
					
					@Override
					public void mouseExited(MouseEvent arg0) {
						return;
					}
					
					@Override
					public void mouseEntered(MouseEvent arg0) {
						return;
					}
					
					@Override
					public void mouseClicked(MouseEvent me) {
						Component c = me.getComponent();
						
						if (!c.isEnabled()) return;
					
						setFieldsChanged(true);
						btnSave.setEnabled(true);
					}
				});
			}
			
		}	

		// ////////////////////////////
		// Mid
		// ////////////////////////////
		// handled in super

		// ////////////////////////////
		// Bottom
		// ////////////////////////////
	

		refreshContestantCBs();
		
		assembleAll();
		
		// used to maintain state... :/
		// HACK AND A HALF.
		addComponentListener(new ComponentAdapter() {
			Contestant ult,week;
			@Override
			public void componentShown(ComponentEvent e){
	            super.componentShown(e);
	            cbUltPick.setSelectedItem(ult);
	            cbWeeklyPick.setSelectedItem(week);
	        }
			
			@Override
			public void componentHidden(ComponentEvent e) {
				super.componentShown(e);
	            ult = (Contestant) cbUltPick.getSelectedItem();
	            week = (Contestant) cbWeeklyPick.getSelectedItem();
			}
		});
	}