Jspinner aceite apenas numeros

1 resposta
I

ja procurei e nao achei uma resposta satisfatoria, como faço para restringir meu spinner para q ele aceite apenas numeros?

1 Resposta

E

Mais fácil dar um exemplo que explicar.

package guj;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;

public class ExemploJSpinnerFormatado extends JFrame {

    private JPanel contentPane;
    private JPanel pnlPonto;
    private JSpinner spinnerPonto;
    private JPanel pnlVirgula;
    private JSpinner spinnerVirgula;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ExemploJSpinnerFormatado frame = new ExemploJSpinnerFormatado();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ExemploJSpinnerFormatado() {
        setTitle("Exemplo JSpinner Formatado");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 360, 195);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        contentPane.add(getPnlPonto(), BorderLayout.NORTH);
        contentPane.add(getPnlVirgula(), BorderLayout.SOUTH);
    }

    private JPanel getPnlPonto() {
        if (pnlPonto == null) {
            pnlPonto = new JPanel();
            pnlPonto.setBorder(new TitledBorder(null, "JSpinner com Ponto Decimal", TitledBorder.LEADING, TitledBorder.TOP, null,
                    null));
            pnlPonto.add(getSpinnerPonto());
        }
        return pnlPonto;
    }

    private JSpinner getSpinnerPonto() {
        if (spinnerPonto == null) {
            spinnerPonto = new JSpinner();
            spinnerPonto.setModel(new SpinnerNumberModel(0.0, 0.0, 100.0, 0.01));
            JSpinner.NumberEditor ne_spinnerPonto = new JSpinner.NumberEditor(spinnerPonto, "0.00");
            ne_spinnerPonto.getFormat().setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.US));
            spinnerPonto.setEditor(ne_spinnerPonto);
        }
        return spinnerPonto;
    }

    private JPanel getPnlVirgula() {
        if (pnlVirgula == null) {
            pnlVirgula = new JPanel();
            pnlVirgula.setBorder(new TitledBorder(null, "JSpinner com V\u00EDrgula Decimal", TitledBorder.LEADING,
                    TitledBorder.TOP, null, null));
            pnlVirgula.add(getSpinnerVirgula());
        }
        return pnlVirgula;
    }

    private JSpinner getSpinnerVirgula() {
        if (spinnerVirgula == null) {
            spinnerVirgula = new JSpinner();
            spinnerVirgula.setModel(new SpinnerNumberModel(0.0, 0.0, 100.0, 0.01));
            JSpinner.NumberEditor ne_spinnerVirgula = new JSpinner.NumberEditor(spinnerVirgula, "0.00");
            ne_spinnerVirgula.getFormat().setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(new Locale("pt", "BR")));
            spinnerVirgula.setEditor(ne_spinnerVirgula);
        }
        return spinnerVirgula;
    }
}

Atenção - não havia percebido, mas o exemplo que tenho aqui não inibe o usuário de digitar caracteres não- numéricos. Acho que é necessário tambem mexer no Document desse JSpinner :frowning:

Criado 20 de março de 2013
Ultima resposta 20 de mar. de 2013
Respostas 1
Participantes 2