范围的通用InputVerifier

时间:2013-04-12 12:34:35

标签: java swing validation java-7 inputverifier

我正在尝试创建一个通用的InputVerifier,它检查JComponent中的数据是否在指定范围内。为此,我制作了我的泛型类型extend Comparable<>确保可以进行比较。

我所关注的是以下两件事:

  1. JComponent没有getText()方法,并且没有一个子类可以转换为JTextField和JSpinner等常用组件所使用的子类,每个组件都有不同的获取值的方法。
  2. 我认为我不能指定我的泛型类型DataType必须具有某个函数签名。我试图看看我是否可以强制它有一个构造函数接受一个字符串(如Integer,Double,Float do),或强制DataType必须扩展Integer,Double或Float,但我不确定如果Java 7 Generics可以实现这一点。如果我可以做一些像DataType myData = new DataType(text);
  3. 那样的话会很棒

    这是我现在的课程。我把它作为抽象的,所以子类必须知道返回文本所涉及的JComponent的类型,然后如何建立可比较的类型进行比较。考虑到可能存在的不同类型的JComponents和Comparable类型,这可以导致许多排列。有没有办法消除我上面提到的一个或两个问题?

    import javax.swing.InputVerifier;
    import javax.swing.JComponent;
    
    public abstract class InputRangeVerifier<DataType extends Comparable<DataType>> extends InputVerifier {
    
        private DataType m_min;
        private DataType m_max;
    
        public InputRangeVerifier(DataType min, DataType max) {
            m_min = min;
            m_max = max;
        }
    
        @Override
        public boolean verify(JComponent component) {
            String componentText = getComponentText();
            DataType comparable = getComparableValue(componentText);
    
            boolean greaterThanOrEqualToMin = comparable.compareTo(m_min) > 0;
            boolean lessThanOrEqualToMax = comparable.compareTo(m_max) < 0;
            boolean isInRange = greaterThanOrEqualToMin && lessThanOrEqualToMax;
    
            return isInRange;
        }
    
        public abstract String getComponentText();
        public abstract DataType getComparableValue(String text);
    
    }
    

0 个答案:

没有答案