public EDGeneral() {
		setOpaque(false);
		setLayout(new MigLayout("", "[150px:150px:150px][50px:70px:80px][50px:100px:100px][200px:200px:500px,grow][230px:230px:230px]", "[20px:20px:20px][20px:20px:20px][20px:20px:20px][20px:20px:20px][20px:20px:20px][20px:20px:20px][20px:20px:20px][20px:20px:20px][20px:20px:20px][20px:20px:20px][20px:20px:20px][20px:20px:20px][20px:20px:20px][20px:20px:20px][20px:20px:20px][20px:20px:20px]"));

		add(new JLabel("Playername"), "cell 0 0,alignx right,aligny center");
		textFieldPlayer = new JTextField();
		textFieldPlayer.addCaretListener(new CaretListener() {
			public void caretUpdate(CaretEvent arg0) {
				do_textFieldPlayer_caretUpdate(arg0);
			}
		});
		textFieldPlayer.setColumns(10);
		textFieldPlayer.setOpaque(false);
		add(textFieldPlayer, "cell 1 0 2 1,growx,aligny center");

		add(new JLabel("Charactername"), "cell 0 1,alignx right,aligny center");
		textFieldName = new JTextField();
		textFieldName.addCaretListener(new CaretListener() {
			public void caretUpdate(CaretEvent arg0) {
				do_textFieldName_caretUpdate(arg0);
			}
		});
		textFieldName.setColumns(10);
		textFieldName.setOpaque(false);
		add(textFieldName, "cell 1 1 2 1,growx,aligny center");

		add(new JLabel("Race"), "cell 0 2,alignx right,aligny center");
		btnRace = new JButton("Change Race");
		add(btnRace, "cell 1 2 2 1,grow");
		btnRace.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				do_btnChangeRace_actionPerformed(arg0);
			}
		});
		btnRace.setOpaque(false);
		btnRace.setContentAreaFilled(false);

		popupMenuRace = new JPopupMenu();
		Map<String, Map<String, List<NAMEGIVERABILITYType>>> namegivers = ApplicationProperties.create().getNamgiversByType();
		for( String namegiversorigin : new TreeSet<String>(namegivers.keySet()) ) {
			JMenu menuRace = new JMenu(namegiversorigin);
			popupMenuRace.add(menuRace);
			Map<String, List<NAMEGIVERABILITYType>> namegiverByOrigin = namegivers.get(namegiversorigin);
			for( String namegiverstype : new TreeSet<String>(namegiverByOrigin.keySet()) ) {
				List<NAMEGIVERABILITYType> namegiverList = namegiverByOrigin.get(namegiverstype);
				Collections.sort(namegiverList, new NamegiverComparator());
				JMenu menu;
				if( namegiverList.size() == 1 ) menu = menuRace;
				else {
					menu = new JMenu(namegiverstype);
					menuRace.add(menu);
				}
				for( NAMEGIVERABILITYType n : namegiverList ) {
					JMenuItem menuItem = new JMenuItem(n.getName());
					menuItem.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent arg0) {
							JMenuItem race = (JMenuItem)arg0.getSource();
							Component racetype = ((JPopupMenu)race.getParent()).getInvoker();
							if( (racetype==null) || !(racetype instanceof JMenu) ) {
								do_Race_Changed(race.getText(),"");
								return;
							}
							Component raceorigin = ((JPopupMenu)racetype.getParent()).getInvoker();
							if( (raceorigin==null) || !(raceorigin instanceof JMenu) ) {
								do_Race_Changed(race.getText(),((JMenu)racetype).getText());
								return;
							}
							do_Race_Changed(race.getText(),((JMenu)raceorigin).getText());
						}
					});
					menu.add(menuItem);
				}
			}
		}

		JScrollPane charDescriptionPanel = new JScrollPane();
		charDescriptionPanel.setBorder(new TitledBorder(new LineBorder(new Color(184, 207, 229)), "Description", TitledBorder.LEFT, TitledBorder.TOP, null, new Color(51, 51, 51)));
		charDescriptionPanel.setOpaque(false);
		add(charDescriptionPanel, "cell 3 0 2 7,grow");

		charDescription = new JTextArea();
		charDescription.setLineWrap(true);
		charDescription.setOpaque(false);
		charDescription.addCaretListener(new CaretListener() {
			public void caretUpdate(CaretEvent arg0) {
				do_charDescription_caretUpdate(arg0);
			}
		});
		charDescriptionPanel.setViewportView(charDescription);
		charDescriptionPanel.getViewport().setOpaque(false);

		rdbtnFemale = new JRadioButton("Female");
		rdbtnFemale.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent arg0) {
				do_rdbtnSex_itemStateChanged(arg0);
			}
		});

		rdbtnFemale.setOpaque(false);
		add(rdbtnFemale, "cell 1 4,alignx left,aligny center");

		rdbtnNoGender = new JRadioButton("No Gender");
		rdbtnNoGender.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent arg0) {
				do_rdbtnSex_itemStateChanged(arg0);
			}
		});
		rdbtnNoGender.setOpaque(false);
		add(rdbtnNoGender, "cell 1 5,alignx left,aligny center");

		add(new JLabel("Birth"), "cell 0 6,alignx trailing,aligny center");
		textFieldBirth = new JTextField();
		textFieldBirth.addCaretListener(new CaretListener() {
			public void caretUpdate(CaretEvent arg0) {
				do_textFieldBirth_caretUpdate(arg0);
			}
		});
		textFieldBirth.setOpaque(false);
		textFieldBirth.setColumns(10);
		add(textFieldBirth, "cell 1 6 2 1,growx,aligny center");

		JScrollPane charCommentPanel = new JScrollPane();
		charCommentPanel.setBorder(new TitledBorder(new LineBorder(new Color(184, 207, 229)), "Comment", TitledBorder.LEFT, TitledBorder.TOP, null, new Color(51, 51, 51)));
		charCommentPanel.setOpaque(false);
		add(charCommentPanel, "cell 3 7 1 6,grow");

		charComment = new JTextArea();
		charComment.setLineWrap(true);
		charComment.setOpaque(false);
		charComment.addCaretListener(new CaretListener() {
			public void caretUpdate(CaretEvent arg0) {
				do_charComment_caretUpdate(arg0);
			}
		});
		charCommentPanel.setViewportView(charComment);
		charCommentPanel.getViewport().setOpaque(false);
		charCommentPanel.setOpaque(false);

		add(new JLabel("Sex"), "cell 0 3,alignx right,aligny center");

		rdbtnMale = new JRadioButton("Male");
		rdbtnMale.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent arg0) {
				do_rdbtnSex_itemStateChanged(arg0);
			}
		});
		rdbtnMale.setOpaque(false);
		add(rdbtnMale, "cell 1 3,alignx left,aligny center");

		pnlPortrait = new JPanel();
		pnlPortrait.setBorder(new TitledBorder(null, "Portrait", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		pnlPortrait.setOpaque(false);
		add(pnlPortrait, "cell 4 7 1 9,alignx center,aligny center");

		lblPortrait = new JLabel();
		pnlPortrait.add(lblPortrait);
		lblPortrait.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseReleased(MouseEvent e) {
				if( e.getButton() == 1 ) do_updatePortrait();
				else setEmptyPortrait();
			}
		});
		lblPortrait.setVerticalAlignment(JLabel.BOTTOM);
		lblPortrait.setHorizontalAlignment(JLabel.CENTER);
		lblPortrait.setOpaque(false);

		add(new JLabel("Skincolor"), "cell 0 10,alignx right,aligny center");
		textFieldSkincolor = new JTextField();
		textFieldSkincolor.addCaretListener(new CaretListener() {
			public void caretUpdate(CaretEvent arg0) {
				do_textFieldSkincolor_caretUpdate(arg0);
			}
		});
		textFieldSkincolor.setColumns(10);
		textFieldSkincolor.setOpaque(false);
		add(textFieldSkincolor, "cell 1 10 2 1,growx,aligny center");

		add(new JLabel("Eyecolor"), "cell 0 11,alignx right,aligny center");
		textFieldEyecolor = new JTextField();
		textFieldEyecolor.addCaretListener(new CaretListener() {
			public void caretUpdate(CaretEvent arg0) {
				do_textFieldEyecolor_caretUpdate(arg0);
			}
		});
		textFieldEyecolor.setColumns(10);
		textFieldEyecolor.setOpaque(false);
		add(textFieldEyecolor, "cell 1 11 2 1,growx,aligny center");

		add(new JLabel("Haircolor"), "cell 0 12,alignx right,aligny center");
		textFieldHaircolor = new JTextField();
		textFieldHaircolor.addCaretListener(new CaretListener() {
			public void caretUpdate(CaretEvent arg0) {
				do_textFieldHaircolor_caretUpdate(arg0);
			}
		});
		textFieldHaircolor.setColumns(10);
		textFieldHaircolor.setOpaque(false);
		add(textFieldHaircolor, "cell 1 12 2 1,growx,aligny center");

		add(new JLabel("Size"), "cell 0 8,alignx right,aligny center");
		labelSize = new JLabel("feet");
		add(labelSize, "cell 2 8,alignx center,aligny center");
		spinnerSize = new JSpinner(new SpinnerNumberModel(0f, 0, 1000, 0.1));
		spinnerSize.setOpaque(false);
		spinnerSize.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent arg0) {
				do_spinnerSize_stateChanged(arg0);
			}
		});
		add(spinnerSize, "cell 1 8,alignx left,aligny center");

		labelWeight=new JLabel("pound");
		add(new JLabel("Weight"), "cell 0 9,alignx right,aligny center");
		add(labelWeight, "cell 2 9,alignx center,aligny center");
		spinnerWeight = new JSpinner(new SpinnerNumberModel(0f, 0, 1000, 0.1));
		spinnerWeight.setOpaque(false);
		spinnerWeight.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent arg0) {
				do_spinnerWeight_stateChanged(arg0);
			}
		});
		add(spinnerWeight, "cell 1 9,alignx left,aligny center");

		add(new JLabel("Damage"), "cell 0 13,alignx right,aligny center");
		spinnerDamage = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1));
		spinnerDamage.setOpaque(false);
		spinnerDamage.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent arg0) {
				do_spinnerDamage_stateChanged(arg0);
			}
		});
		add(spinnerDamage, "cell 1 13,alignx left,aligny center");

		add(new JLabel("NormalWounds"), "cell 0 14,alignx right,aligny center");
		spinnerNormalWounds = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1));
		spinnerNormalWounds.setOpaque(false);
		spinnerNormalWounds.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent arg0) {
				do_spinnerNormalWounds_stateChanged(arg0);
			}
		});
		add(spinnerNormalWounds, "cell 1 14,alignx left,aligny center");

		add(new JLabel("BloodWounds"), "cell 0 15,alignx right,aligny center");
		spinnerBloodWounds = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1));
		spinnerBloodWounds.setOpaque(false);
		spinnerBloodWounds.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent arg0) {
				do_spinnerBloodWounds_stateChanged(arg0);
			}
		});
		add(spinnerBloodWounds, "cell 1 15,alignx left,aligny center");

		add(new JLabel("Age"), "cell 0 7,alignx right,aligny center");
		add(new JLabel("year"), "cell 2 7,alignx left,aligny center");
		spinnerAge = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1));
		spinnerAge.setOpaque(false);
		spinnerAge.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent arg0) {
				do_spinnerAge_stateChanged(arg0);
			}
		});
		add(spinnerAge, "cell 1 7,alignx left,aligny center");

		txtRaceabilities = new JTextArea();
		txtRaceabilities.setLineWrap(true);
		txtRaceabilities.setOpaque(false);
		txtRaceabilities.setEditable(false);
		JScrollPane panelRaceabilities = new JScrollPane();
		panelRaceabilities.setBorder(new TitledBorder(new LineBorder(new Color(184, 207, 229)), "Race Abilities", TitledBorder.LEFT, TitledBorder.TOP, null, new Color(51, 51, 51)));
		panelRaceabilities.setOpaque(false);
		panelRaceabilities.setViewportView(txtRaceabilities);
		panelRaceabilities.getViewport().setOpaque(false);
		add(panelRaceabilities, "cell 2 13 2 3,grow");

		ButtonGroup group = new ButtonGroup();
		group.add(rdbtnMale);
		group.add(rdbtnFemale);
		group.add(rdbtnNoGender);
	}