@Override
	protected Component buildInlineEditorComponent() {

		JPanel panel = new JPanel(new BorderLayout());

		Double value = getConstraint().getConstraintValue().doubleValue();

		Number stepSize = Double.valueOf(.1);

		spinnerModel = new SpinnerNumberModel(value, null, null, stepSize);
		spinner = new JSpinner(spinnerModel);
		spinner.setName("double.spinner");

		NumberEditor numEditor = (NumberEditor) spinner.getEditor();
		JFormattedTextField textField = numEditor.getTextField();
		textField.setHorizontalAlignment(SwingConstants.RIGHT);

		textField.setValue(value);
		textField.setFormatterFactory(
			new BoundedRangeDecimalFormatterFactory(FLOATING_POINT_FORMAT));

		textField.setColumns(12);

		textField.getDocument().addDocumentListener(new DocumentListener() {
			@Override
			public void removeUpdate(DocumentEvent e) {
				textChanged(textField);
			}

			@Override
			public void insertUpdate(DocumentEvent e) {
				textChanged(textField);
			}

			@Override
			public void changedUpdate(DocumentEvent e) {
				textChanged(textField);
			}
		});
		spinner.addMouseWheelListener(e -> {
			Number val = (Number) spinner.getValue();
			try {
				double step = spinnerModel.getStepSize().doubleValue();
				if (e.getWheelRotation() > 0) {
					spinner.setValue(decrement(val, step));
				}
				else {
					spinner.setValue(increment(val, step));
				}
			}
			catch (IllegalArgumentException iae) {
				// ignored
			}
		});

		spinnerModel.addChangeListener(e -> valueChanged());

		panel.add(spinner);

		return panel;
	}
A constraint editor for specifying comparison with a single floating-point value (Float and Double).
Ghidra/Framework/Docking/src/main/java/docking/widgets/table/constrainteditor/DoubleValueConstraintEditor.java