[RESOLVIDOJSpinner, como mudar o simbolo decimal de "." para ","?

Estou com dificuldades para formatar a saida desse componente, eu quero mostrar o simbolo de decimal de “,” para “.” mas só aparece o “.” no valor inicial “0.00” se eu uso as flechinhas do Spinner os numeros voltam usando “,” para separar a virgula.

        JSpinner spteta = new JSpinner();
        JSpinner.NumberEditor editor = new JSpinner.NumberEditor(spteta,"0,00");
        DecimalFormat format = editor.getFormat();
        //leio conf local

        Locale myLocale = new Locale("pt", "BR");
        DecimalFormatSymbols decimalSymbol = new DecimalFormatSymbols(myLocale);
        
        // mudo configuracao local
        decimalSymbol.setDecimalSeparator('.');
        decimalSymbol.setGroupingSeparator(',');
        
        
        format.setDecimalFormatSymbols(decimalSymbol);

        spteta.setEditor(editor);
        .
        .
        .
        //adiciono componente ao painel

Depois de muita tentativa e erro, cheguei a este resultado:

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;
    }
}

O JSpinner ou o NumberEditor deveria ter um construtor que aceitasse um NumberFormat - aí você poderia passar um NumberFormat em vez de ficar fazendo essas coisas nojentas (eu tentei umas 6 coisas diferentes até chegar ao resultado acima).

Valeu entanglement! Profissional teu post, fonte, gif do resultado e até link de download :thumbup:

Realmente apesar de gostar muito de programar em Java (programava em C++ e assembler), eu percebo que algumas coisas que do ponto de vista do usuário são simples (mudar o formato de vírgula para ponto é um bom exemplo) e não obstante tem que escrever um “sistema operacional” de código para fazê-lo. E a documentação da Oracle é horrivel, só dá o básico do básico mesmo…

O que nos salva é a comunidade (O GUJ incluso) que é grande e ativa, sempre buscando e discutindo soluções.

Oi,

Interessante. Nunca precisei fazer isso. Já está anotado :wink:

Tchauzin!