@Override
	public final void display(final JPanel panel,
			@SuppressWarnings("hiding") final KeyEventHandler key) {
		this.textField = new JTextField();
		final JScrollPane scrollPane = new JScrollPane(this.textField);
		final JPanel mainPanel = new JPanel();
		final String value = value();

		final StringBuilder sb = new StringBuilder(value);
		if (value == null) {
			value("");
			this.textField.setForeground(Color.GRAY);
			this.textField.setText(getTooltip());
		} else {
			this.textField.setForeground(Color.BLACK);
			this.textField.setText(value);
		}
		this.textField.addKeyListener(new KeyListener() {

			final int[] cursor = new int[3];

			@Override
			public final void keyPressed(final KeyEvent e) {
				e.consume();
			}

			@Override
			public final void keyReleased(final KeyEvent e) {
				this.cursor[1] = StringOption.this.textField
						.getSelectionStart();
				this.cursor[2] = StringOption.this.textField.getSelectionEnd();
				if (this.cursor[1] == this.cursor[2]) {
					this.cursor[0] = StringOption.this.textField
							.getCaretPosition();
				}
				final int keyEvent = sb.handleEvent(e, this.cursor);
				if (keyEvent != 0) {
					key.handleKeyEvent(keyEvent);
				} else {
					if (sb.isEmpty()) {
						this.cursor[0] = 0;
						StringOption.this.textField.setText(getTooltip());
						StringOption.this.textField.setForeground(Color.GRAY);
					} else {
						StringOption.this.textField.setText(sb.toString());
						StringOption.this.textField.setForeground(Color.BLACK);
					}
					if (this.cursor[1] != this.cursor[2]) {
						StringOption.this.textField
								.setSelectionStart(this.cursor[1]);
						StringOption.this.textField
								.setSelectionEnd(this.cursor[2]);
					} else {
						StringOption.this.textField
								.setCaretPosition(this.cursor[0]);
					}
				}
				e.consume();
			}

			@Override
			public final void keyTyped(final KeyEvent e) {
				e.consume();
			}
		});

		mainPanel.setLayout(new BorderLayout());
		mainPanel.add(new JLabel(getDescription()), BorderLayout.SOUTH);
		mainPanel.add(scrollPane);
		mainPanel.setPreferredSize(new Dimension(100, 55));
		panel.add(mainPanel);
	}