Я работаю над апплетом Sudoku, я хочу сделать ячейки (расширяет JTextField), чтобы он принимал только целые числа от 0 до 9 и длину 1. Позже я ограничу это еще больше (так что это соответствовало бы правилам игры). Я начал:Сделать JTextField только одной цифрой
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 маленьких кнопок вместо этого? – Domi
Возможно, вам может быть полезен JFormattedTextField? http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html –
Да, ['JFormattedTextField'] (http://docs.oracle.com/javase/7/docs/api/javax /swing/JFormattedTextField.html) вместе с ['MaskFormatter'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/text/MaskFormatter.html) выполнит эту работу. – Holger