public void addRow( String valueName, ContentType contentType ) {
		gridC.fill = GridBagConstraints.HORIZONTAL;
		gridC.gridwidth = 1;
		gridC.weighty = 0.0;
		gridC.gridx = 0;
		this.add( new JLabel( valueName +":" ), gridC );

		gridC.gridx++;
		if ( contentType == ContentType.WRAPPED_LABEL ) {
			gridC.anchor = GridBagConstraints.WEST;
			JTextArea valueArea = new JTextArea();
			valueArea.setBackground(null);
			valueArea.setEditable( false );
			valueArea.setBorder(null);
			valueArea.setLineWrap( true );
			valueArea.setWrapStyleWord( true );
			valueArea.setFocusable( false );

			wrappedLabelMap.put( valueName, valueArea );
			this.add( valueArea, gridC );
		}
		else if ( contentType == ContentType.LABEL ) {
			gridC.anchor = GridBagConstraints.WEST;
			JLabel valueLbl = new JLabel();
			valueLbl.setHorizontalAlignment( SwingConstants.CENTER );
			labelMap.put( valueName, valueLbl );
			this.add( valueLbl, gridC );
		}
		else if ( contentType == ContentType.STRING ) {
			gridC.anchor = GridBagConstraints.WEST;
			JTextField valueField = new JTextField();
			stringMap.put( valueName, valueField );
			this.add( valueField, gridC );
		}
		else if ( contentType == ContentType.INTEGER ) {
			gridC.anchor = GridBagConstraints.WEST;
			JTextField valueField = new JTextField();
			valueField.setHorizontalAlignment( JTextField.RIGHT );
			valueField.setDocument( new RegexDocument("[0-9]*") );
			intMap.put( valueName, valueField );
			this.add( valueField, gridC );
		}
		else if ( contentType == ContentType.BOOLEAN ) {
			gridC.anchor = GridBagConstraints.CENTER;
			JCheckBox valueCheck = new JCheckBox();
			valueCheck.setHorizontalAlignment( SwingConstants.CENTER );
			boolMap.put( valueName, valueCheck );
			this.add( valueCheck, gridC );
		}
		else if ( contentType == ContentType.SLIDER ) {
			gridC.anchor = GridBagConstraints.CENTER;
			JPanel panel = new JPanel();
			panel.setLayout( new BoxLayout(panel, BoxLayout.X_AXIS) );
			final JSlider valueSlider = new JSlider( JSlider.HORIZONTAL );
			valueSlider.setPreferredSize( new Dimension(50, valueSlider.getPreferredSize().height) );
			sliderMap.put( valueName, valueSlider );
			panel.add(valueSlider);
			final JTextField valueField = new JTextField(3);
			valueField.setMaximumSize( valueField.getPreferredSize() );
			valueField.setHorizontalAlignment( JTextField.RIGHT );
			valueField.setEditable( false );
			panel.add(valueField);
			this.add( panel, gridC );

			valueSlider.addChangeListener(new ChangeListener() {
				@Override
				public void stateChanged(ChangeEvent e) {
					valueField.setText( ""+valueSlider.getValue() );
				}
			});
		}
		else if ( contentType == ContentType.COMBO ) {
			gridC.anchor = GridBagConstraints.CENTER;
			JComboBox valueCombo = new JComboBox();
			valueCombo.setEditable(false);
			comboMap.put( valueName, valueCombo );
			this.add( valueCombo, gridC );
		}
		gridC.gridx++;

		if ( remindersVisible ) {
			gridC.anchor = GridBagConstraints.WEST;
			JLabel valueReminder = new JLabel();
			reminderMap.put( valueName, valueReminder );
			this.add( valueReminder, gridC );
		}

		gridC.gridy++;
	}