Fix issues with UnsignedIntegerModel in a spinner.
This commit is contained in:
parent
a6e9e89ace
commit
18ecc41b39
@ -31,6 +31,7 @@ import javax.swing.border.Border;
|
||||
import javax.swing.border.CompoundBorder;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
import javax.swing.event.DocumentListener;
|
||||
import javax.swing.text.DefaultFormatterFactory;
|
||||
|
||||
|
||||
/**
|
||||
@ -310,6 +311,10 @@ public abstract class Components {
|
||||
CompoundBorder editorBorder = BorderFactory.createCompoundBorder(
|
||||
BorderFactory.createLineBorder( Res.colors().controlBorder(), 1, true ),
|
||||
BorderFactory.createEmptyBorder( 4, 4, 4, 4 ) );
|
||||
DefaultFormatterFactory formatterFactory = new DefaultFormatterFactory();
|
||||
if (model instanceof UnsignedIntegerModel)
|
||||
formatterFactory.setDefaultFormatter( ((UnsignedIntegerModel)model).getFormatter() );
|
||||
((DefaultEditor) getEditor()).getTextField().setFormatterFactory( formatterFactory );
|
||||
((DefaultEditor) getEditor()).getTextField().setBorder( editorBorder );
|
||||
setAlignmentX( LEFT_ALIGNMENT );
|
||||
setBorder( null );
|
||||
|
@ -19,20 +19,18 @@
|
||||
package com.lyndir.masterpassword.gui.util;
|
||||
|
||||
import com.google.common.primitives.UnsignedInteger;
|
||||
import java.text.ParseException;
|
||||
import java.util.function.Consumer;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
|
||||
|
||||
/**
|
||||
* @author lhunath, 2016-10-29
|
||||
*/
|
||||
public class UnsignedIntegerModel extends SpinnerNumberModel
|
||||
implements Selectable<UnsignedInteger, UnsignedIntegerModel> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
@SuppressWarnings("serial")
|
||||
public class UnsignedIntegerModel extends SpinnerNumberModel implements Selectable<UnsignedInteger, UnsignedIntegerModel> {
|
||||
|
||||
@Nullable
|
||||
private ChangeListener changeListener;
|
||||
@ -64,6 +62,37 @@ implements Selectable<UnsignedInteger, UnsignedIntegerModel> {
|
||||
return (UnsignedInteger) super.getNumber();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnsignedInteger getMinimum() {
|
||||
return (UnsignedInteger) super.getMinimum();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnsignedInteger getMaximum() {
|
||||
return (UnsignedInteger) super.getMaximum();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnsignedInteger getStepSize() {
|
||||
return (UnsignedInteger) super.getStepSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnsignedInteger getNextValue() {
|
||||
if ((getMaximum() == null) || (getMaximum().compareTo( getNumber() ) > 0))
|
||||
return getNumber().plus( getStepSize() );
|
||||
|
||||
return getMaximum();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnsignedInteger getPreviousValue() {
|
||||
if ((getMinimum() == null) || (getMinimum().compareTo( getNumber() ) < 0))
|
||||
return getNumber().minus( getStepSize() );
|
||||
|
||||
return getMinimum();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UnsignedIntegerModel selection(@Nullable final Consumer<UnsignedInteger> selectionConsumer) {
|
||||
if (changeListener != null) {
|
||||
@ -89,4 +118,22 @@ implements Selectable<UnsignedInteger, UnsignedIntegerModel> {
|
||||
setValue( selectedItem );
|
||||
return selection( selectionConsumer );
|
||||
}
|
||||
|
||||
public JFormattedTextField.AbstractFormatter getFormatter() {
|
||||
return new JFormattedTextField.AbstractFormatter() {
|
||||
@Override
|
||||
@Nullable
|
||||
public Object stringToValue(@Nullable final String text)
|
||||
throws ParseException {
|
||||
return (text != null)? UnsignedInteger.valueOf( text ): null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String valueToString(final Object value)
|
||||
throws ParseException {
|
||||
return (value != null)? value.toString(): null;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -75,7 +75,9 @@ public class MPFileSite extends MPBasicSite<MPFileUser, MPFileQuestion> {
|
||||
return url;
|
||||
}
|
||||
|
||||
public void setUrl(@Nullable final String url) {
|
||||
public void setUrl(@Nullable String url) {
|
||||
if ((url != null) && url.isEmpty())
|
||||
url = null;
|
||||
if (Objects.equals( this.url, url))
|
||||
return;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user