TextField - tylko cyfry z zakresu [1-9]

0

Witam.
Próbuje ograniczyć pole tekstowe tak, aby przyjmowało tylko cyfry z zakresu [1-9]. Próbowałem wykorzystać coś w stylu:

MaskFormatter mask=new MaskFormatter("#");
mask.setValidCharacters("123456789");
JFormattedTextField ftf=new JFormattedTextField(mask);

Na początku wszystko działa dobrze, jednak gdy wykonam
tft.setText("");
pole tekstowe przestaje działać.
Jak mogę to poprawić, żeby działało po wyczyszczeniu? Chyba, że jest na to jakiś inny sposób ?

Przykładowy program, bo nie wiem czy każdy zrozumiał o co mi chodzi.

import java.awt.*;
import java.awt.event.*;

public class Przyklad extends javax.swing.JFrame implements ActionListener {
	
	javax.swing.JFormattedTextField tft;
	javax.swing.JButton przycisk = new javax.swing.JButton();
	javax.swing.text.MaskFormatter mask=null;
 
public Przyklad()
 {
 	try {
        mask = new javax.swing.text.MaskFormatter("#");
        mask.setValidCharacters("123456789");
        } catch (java.text.ParseException e) {}
        
 	tft=new javax.swing.JFormattedTextField(mask);
 	Dimension d1=new Dimension(35,35);
 	tft.setPreferredSize(d1);
  
  setLayout(new FlowLayout()); 
 
  add(tft);
  
  przycisk.setText("Wyczysc");
  przycisk.addActionListener(this);
  add(przycisk);
  setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 }

public void actionPerformed(ActionEvent ev)
{
 tft.setText("");
}

public static void main(String args[])
 {
  Przyklad p = new Przyklad();
  p.setSize(320,70);
  p.setVisible(true);
 }
}
0

Po wyczyszczeniu możesz nadal wprowadzać, tylko kursor musisz przesunąć na początek (ręcznie albo programowo). MaskFormatter dodaje do tekstu placeholdery (jeśli jest krótszy niż zakładany) i to on tutaj zajmuje już przestrzeń jednego znaku - dlatego nie można pisać za nim. Domyślnie jest to spacja, którą można zmienić poprzez MaskFormatter.setPlaceHolder() i MaskFormatter.setPlaceHolderCharacter()

0

Dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1