2011-06-12 73 views
7

我有类​​。我想为它使用自定义渲染器(已完成)并且像编辑器一样加倍。但我什至不能找到双编辑器(只有数字),所以我真的不知道我应该如何实现它。问题是:我应该如何实施它?概率单元格编辑器

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

+1

首先您能解释一下“双编辑器”是什么吗? – 2011-06-12 11:58:54

+1

@Hovercraft Full Of Eels,它是'TableCellEditor',允许在jtable的单元格中输入双打 – 2011-06-12 12:02:15

+0

了解它。有趣的问题,谢谢。 – 2011-06-12 16:10:03

回答

5

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方法返回。

+0

+1 ['DecEditor'](http://stackoverflow.com/questions/2511270/advice-welcomed-on-creating-my-own-swing-component/2511415#2511415)就是一个例子。 – trashgod 2011-06-12 13:49:13

+0

非常感谢。它完全按照我希望编辑有效值的方式工作。但是我没有用'DocumentFilter'的想法。我怎么能允许以这种方式输入大数字? – 2011-06-12 14:47:27

+0

@Stas:我给答案增加了一个例子。 – 2011-06-12 15:02:25

5

..numbers在范围0..100

使用JSpinnerTableCellEditor

+0

谢谢。但不幸的是,我不认为这对我的情况有用。这不是整数,用户将通过键入数字手动输入值。 – 2011-06-12 12:16:07

+0

我真的很困惑,你从哪里来的蓝色到紫色的眼睛,好的建议+1没有sideEffects – mKorbel 2011-06-12 12:44:04

+0

@mKorbel:“你从哪里来的蓝色到紫色的眼睛”我对那个形象感到厌恶。有一天在玩[文本剪辑](http://stackoverflow.com/questions/6295084/cut-out-image-in-shape-of-text/6296381#6296381)后,我想我会尝试并结合一些字母放入一个“形状”中。几分钟后,我有了新的图像。 (倾斜头)不确定我是否喜欢它。 ;) – 2011-06-12 17:52:39