2013-04-10 24 views
5

pracuję na solver sudoku i próbuję ograniczyć ilość numerów użytkownik może wprowadzić do komórki, a także TYLKO jest w stanie wprowadzić cyfry, obecnie również akceptuje litery. W tej chwili działa to tak: Jeśli użytkownik wpisze "11125455876", po prostu użyje ostatniego wprowadzonego numeru (w tym przypadku "6"). Chciałbym ograniczyć liczbę liczb, które użytkownik może wprowadzić w pojedynczej komórce do 1 i akceptować tylko numery: 1-9. Nie jestem do końca pewien, jak to zrobić. Może więc nadpisze poprzedni numer lub coś takiego, a jeśli naciśnie klawisz literowy jako "a", nic nie powinno się wydarzyć.granica wprowadzania numeru JTextField

Oto mój kod:

public PanelGUI(int size) { 

    super(size); 
    NumberFormat f = NumberFormat.getInstance(); 
    f.setMaximumIntegerDigits(1); 
    f.setMinimumIntegerDigits(0); 
    f.setGroupingUsed(false); 
    cells = new JTextField[size][size]; 
    panel.setLayout(new GridLayout(size, size)); 
    for (int i = 0; i < size; i++) { 
     for (int j = 0; j < size; j++) { 
      cells[i][j] = new JFormattedTextField(f); 
      cells[i][j].setEditable(true); 
      cells[i][j].setFont(boldFont); 
      cells[i][j].setBorder(BorderFactory.createMatteBorder(1, 1, 1, 
        1, Color.white)); 
      cells[i][j].setHorizontalAlignment(JTextField.CENTER); 
      panel.add(cells[i][j]); 
     } 
    } 
} 

Jak widać obecnie używam number format.

+1

Użyj [ 'DocumentFilter'] (http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/text/DocumentFilter.html), aby ograniczyć nakłady. –

+0

@Extreme Coders Czy możesz napisać odpowiedź na to, jak powinno wyglądać w moim przypadku? Nie jestem z tym zbyt zaznajomiony. Co należy zmienić? – Rob

+0

http://stackoverflow.com/questions/3519151/how-to-limit-the-number-characteri-n-ntextfield – herinkc

Odpowiedz

3
NumberFormat f = NumberFormat.getInstance(); 
f.setMaximumIntegerDigits(1); 
f.setMinimumIntegerDigits(0); 
f.setGroupingUsed(false); 

chcesz użyć instread MaskFormat:

MaskFormatter f = new MaskFormatter("#"); 
f.setValidCharacters("123456789"); 
+0

Próbowałem tego, o czym wspomniałeś, ale daje mi błąd i mówi, żebym dodał deklarację throw lub surround z try/catch. Jednak nie działało to z tymi. – Rob

+1

Więc dodaj próbę/catch. Jest to standardowe programowanie w języku Java i nie ma nic wspólnego z tym kodem. Musisz wiedzieć, jak radzić sobie z wyjątkami. Możesz zawsze przeszukiwać forum/wed na przykład używając try/catch. – camickr