Java 概率单元编辑器

Java 概率单元编辑器,java,swing,jtable,Java,Swing,Jtable,我有课概率。我想为它使用自定义渲染器(已经完成),并使用类似于编辑器的双精度渲染器。但我甚至找不到双编辑器(唯一的数字),所以我真的不知道应该如何实现它。问题是:我应该如何实施它 *与双编辑器的区别:它应该只允许范围0..100 ..范围为0到100的数字 使用JSpinner作为TableCellEditor如何使用JFormattedTextField和AbstractFormatter进行转换,并使用DocumentFilter拒绝任何无效的百分比值 下面是一个DocumentFilter

我有课
概率
。我想为它使用自定义渲染器(已经完成),并使用类似于编辑器的双精度渲染器。但我甚至找不到双编辑器(唯一的数字),所以我真的不知道应该如何实现它。问题是:我应该如何实施它

*与双编辑器的区别:它应该只允许范围
0..100

..范围为0到100的数字


使用
JSpinner
作为
TableCellEditor

如何使用
JFormattedTextField
和AbstractFormatter进行转换,并使用DocumentFilter拒绝任何无效的百分比值

下面是一个DocumentFilter示例(未经测试,请参阅文档):

class PercentageFilter扩展了DocumentFilter{
insertString(FilterBypass bp、整数偏移量、字符串添加、属性集属性){
Document doc=bp.getDocument();
String text=doc.getText(0,offset)+adding+doc.getText(offset,doc.getLength()-offset);
试一试{
double d=double.parseDouble(文本);
如果(d<0 | | 100是否将其真正插入到文档中。
插入字符串(偏移、添加、属性);
}
}
您可能希望类似地覆盖
remove()
replace

(我想可能会有一个更高效的实现,但我想这对于大多数用户的输入速度来说已经足够快了。)


这个过滤器将从AbstractFormatter实现的
getDocumentFilter
方法返回。

首先,您能解释一下“双编辑器”是什么吗?@满是鳗鱼的气垫船,正是
TableCellEditor
允许在jtable的单元格中输入双倍的内容。有意思的问题,谢谢。但不幸的是,我不认为这对我来说有用。它不是整数,用户会通过键入数字手动输入值。我真的很困惑,你的fromBlueToPurple eye,+1在哪里可以提供好的建议sideEffects@mKorbel:“你的蓝眼睛在哪里?”我对那张照片感到厌烦。前几天玩过之后,我想我应该试着把一些字母组合成一个
形状。几分钟后,我得到了新的图像。(歪着头)还不确定我是否喜欢它+1是一个例子。非常感谢。它的工作原理完全符合我编辑有效值的愿望。但是我对
DocumentFilter
没有什么概念。我怎么能允许以这种方式输入大数字?@Stas:我在答案中添加了一个例子。
class PercentageFilter extends DocumentFilter {
    insertString(FilterBypass bp, int offset, String adding, AttributeSet attrs) {
        Document doc = bp.getDocument();
        String text = doc.getText(0, offset) + adding + doc.getText(offset, doc.getLength()-offset);
        try {
            double d = Double.parseDouble(text);
            if(d < 0 || 100 < d) {
                // to big or too small number
                return;
            }
        }
        catch(NumberFormatException ex) {
            // invalid number, do nothing.
            return;
        }
        // if we come to this point, the entered number
        // is a valid value => really insert it into the document.
        bp.insertString(offset, adding, attrs);
    }
}