2016-06-01 19 views
1

Wenn ungültige Eingabe in das JSpinner eingegeben wird, wird ein Piep gespielt, und ich kann nicht herausfinden, wie man es deaktiviert.Java: Wie man JSpinner piepst

ich eine Reihe Spinner mit einem ungültigen Eingabe bin nicht, wie so eingegeben werden, wobei erlaubt:

public class SpinnerTester { 

    public static void main(String[] args) { 

     JSpinner spinner = new JSpinner(new SpinnerNumberModel(1, 0, 100, 1)); 


     //disable invalid input from being typed into spinner 
     JFormattedTextField textField = ((JSpinner.NumberEditor) spinner.getEditor()).getTextField(); 
     ((NumberFormatter) textField.getFormatter()).setAllowsInvalid(false); 

     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.add(spinner); 
     frame.setVisible(true); 
     frame.pack(); 
    } 

} 
+0

Also habe ich herausgefunden, wie das geht. Ehrlich gesagt, es ist ein kompletter Hack-Job und sollte nicht gemacht werden. Besser noch, warum willst du das deaktivieren? Es scheint wirklich so, als ob Sie ein besseres System brauchen. – Obicere

+0

@Obicere Aus Neugier, wie hast du es gemacht? Ich habe mehrere Methoden ausprobiert, aber die einzige, die für mich funktionierte, war die unten angegebene, die nicht ideal ist. – Kosaro

Antwort

0

Ich weiß nicht, ob es ein besserer Weg, aber ein Weg ist, ein zu machen Custom Look and Feel, die das Piepen insgesamt deaktiviert. Dies erreicht den gewünschten Effekt, deaktiviert aber auch das Piepen für das gesamte Programm, nicht nur den Spinner.

public class SpinnerTester { 

    public static void main(String[] args) { 

     JSpinner spinner = new JSpinner(new SpinnerNumberModel(1, 0, 100, 1)); 


     //disable invalid input from being typed into spinner 
     JFormattedTextField textField = ((JSpinner.NumberEditor) spinner.getEditor()).getTextField(); 
     ((NumberFormatter) textField.getFormatter()).setAllowsInvalid(false); 

     /** 
     * Change look and field 
     */ 
     try { 
      UIManager.setLookAndFeel(new MyLookAndFeel()); 
     } catch (UnsupportedLookAndFeelException e) { 
      e.printStackTrace(); 
     } 

     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.add(spinner); 
     frame.setVisible(true); 
     frame.pack(); 

    } 

    /** 
    * Create Look and Feel without beeps 
    */ 
    public static class MyLookAndFeel extends NimbusLookAndFeel { 
     @Override 
     public void provideErrorFeedback(Component component) { 
      //super.provideErrorFeedback(component); 
     } 
    } 
} 

Basierend auf einer Antwort auf this question.