我有类。我想为它使用自定义渲染器(已完成)并且像编辑器一样加倍。但我什至不能找到双编辑器(只有数字),所以我真的不知道我应该如何实现它。问题是:我应该如何实施它?概率单元格编辑器
*双重编辑器的区别:它应该只允许号码范围0..100
我有类。我想为它使用自定义渲染器(已完成)并且像编辑器一样加倍。但我什至不能找到双编辑器(只有数字),所以我真的不知道我应该如何实现它。问题是:我应该如何实施它?概率单元格编辑器
*双重编辑器的区别:它应该只允许号码范围0..100
JFormattedTextField
如何使用AbstractFormatter进行转换,并使用DocumentFilter来拒绝任何不是有效百分比值的东西?
下面是一个例子的DocumentFilter(未测试,从阅读的文档):
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);
}
}
你想覆盖remove()
和replace
类似。
(我猜有可能是一个更有效的实现,但是这将是大多数用户的打字速度够快,我想。)
这个过滤器会从你的AbstractFormatter实现的getDocumentFilter
方法返回。
+1 ['DecEditor'](http://stackoverflow.com/questions/2511270/advice-welcomed-on-creating-my-own-swing-component/2511415#2511415)就是一个例子。 – trashgod 2011-06-12 13:49:13
非常感谢。它完全按照我希望编辑有效值的方式工作。但是我没有用'DocumentFilter'的想法。我怎么能允许以这种方式输入大数字? – 2011-06-12 14:47:27
@Stas:我给答案增加了一个例子。 – 2011-06-12 15:02:25
..numbers在范围0..100
使用JSpinner
为TableCellEditor
。
谢谢。但不幸的是,我不认为这对我的情况有用。这不是整数,用户将通过键入数字手动输入值。 – 2011-06-12 12:16:07
我真的很困惑,你从哪里来的蓝色到紫色的眼睛,好的建议+1没有sideEffects – mKorbel 2011-06-12 12:44:04
@mKorbel:“你从哪里来的蓝色到紫色的眼睛”我对那个形象感到厌恶。有一天在玩[文本剪辑](http://stackoverflow.com/questions/6295084/cut-out-image-in-shape-of-text/6296381#6296381)后,我想我会尝试并结合一些字母放入一个“形状”中。几分钟后,我有了新的图像。 (倾斜头)不确定我是否喜欢它。 ;) – 2011-06-12 17:52:39
首先您能解释一下“双编辑器”是什么吗? – 2011-06-12 11:58:54
@Hovercraft Full Of Eels,它是'TableCellEditor',允许在jtable的单元格中输入双打 – 2011-06-12 12:02:15
了解它。有趣的问题,谢谢。 – 2011-06-12 16:10:03