Java: how to delete spaces in jformattedtextfield?

So I have a jformattedtextfield that lets users enter a number The number can be 1 to 99, so I used maskformatter ("##") However, for some reason, if I don't enter anything, it will place 2 spaces in the text field This is annoying because if the user clicks on the center of the text field to enter a number, it will place the cursor at the end of the 2 spaces (because the spaces are shorter than the numbers), so they must return to place the number

How do I delete these spaces and leave the text field blank? I tried to do settext (""), but it didn't do anything

This is the code:

private jformattedtextfield sequenceJTF = new jformattedtextfield();
private JLabel sequenceLabel = new JLabel("Enter a number :");

public Window(){
      this.setTitle("Generic title");
      this.setSize(350,250);
      this.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
      this.setLocationRelativeTo(null);
      this.setVisible(true);

      JPanel container = new JPanel();


      DefaultFormatter format = new DefaultFormatter();
      format.setOverwriteMode(false); //prevents clearing the field if user enters wrong input (happens if they enter a single digit)
      sequenceJTF = new jformattedtextfield(format);
      try {
          MaskFormatter mf = new MaskFormatter("##");
          mf.install(sequenceJTF); //assign the maskformatter to the text field
      } catch (ParseException e) {}
      sequenceJTF.setPreferredSize(new Dimension(20,20));
      container.add(sequenceLabel);
      container.add(sequenceJTF);
      this.setContentPane(container);
  }

Solution

Your MF Install (sequencejtf) the following Java core contains the following code:

...
ftf.setText(valueToString(ftf.getValue())); // ftf - jformattedtextfield
...

Valuetostring() returns two spaces if there are no characters to match the mask "##" Spaces are taken from maskformatter Getplaceholdercharacter(), which returns a space as the default character

My solution is not that good, but it works:

try {
    MaskFormatter mf = new MaskFormatter("##") {
        @Override
        public char getPlaceholderCharacter() {
            return '0'; // replaces default space characters with zeros
        }
    };
    mf.install(sequenceJTF); //assign the maskformatter to the text field
} catch (ParseException e) {
    e.printStackTrace(); // always,remember,ALWAYS print stack traces
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>