【发布时间】:2013-12-22 19:10:45
【问题描述】:
我正在开发一个数独小程序,我想制作它的单元格(扩展 JTextField),以便它只接受 0-9 和长度为 1 之间的整数。稍后我会进一步限制它(所以它符合游戏规则)。我是这样开始的:
public Block(int[] blockNum){
this.setLayout(new GridLayout(3,3));
this.setBorder(new LineBorder(Color.BLACK,2));
for(int i=0; i<CELL_COUNT; i++){
cells[i] = new Cell(); // Cell extends JTextField
((AbstractDocument)cells[i].getDocument()).setDocumentFilter(
new MyDocumentFilter()); // <- this is relevant for this question
if(blockNum[i]!=0){
cells[i].setNumber(blockNum[i]);
cells[i].setEditable(false);
}
this.add(cells[i]);
}
}
}
我在这里尝试过滤输入,一开始我只是尝试将其限制为整数和一位数字,但似乎我可以输入任意多的数字并且最后一行没有被触发。
在这里需要一些帮助,谢谢:
class MyDocumentFilter extends DocumentFilter
{
@Override
public void replace(DocumentFilter.FilterBypass fp, int offset
, int length, String string, AttributeSet aset)
throws BadLocationException
{
int len = string.length();
boolean isValidInteger = true;
if (len>1 || !Character.isDigit(string.charAt(0))) isValidInteger = false;
if (isValidInteger)
super.replace(fp, offset, length, string, aset);
else
Toolkit.getDefaultToolkit().beep();
}
}
【问题讨论】:
-
为什么不直接使用 10 个小按钮呢?
-
也许 JFormattedTextField 可能对您有用? docs.oracle.com/javase/tutorial/uiswing/components/…
-
是的,
JFormattedTextField和MaskFormatter将完成这项工作。 -
或创建自定义文档。
标签: java swing jtextfield documentfilter