Boa Noite!
Estou com um problema… Estou montado uma calculadora que tem um campo “visor” e outro de “entrada” que recebe o valor do visor quando clicado no botão “enter”. Tenho ainda o botão mais e menos para casas decimais (limitado a 9 casas). Está tudo funcionando perfeitamente, mas quando o valor do visor é transportado para o campo entrada e em seguida tento aumentar ou diminuir as casas decimais tenho uma “exception” que lista as seguintes linhas do código:
a) o “return” que formata os números (“return dec.format(new java.math.BigDecimal(s));”) na função formatStrNum
b) a inclusão do texto no campo “entrada” (“input.setText(formatStrNum(vlinput, vldecimals));”)
c) o actionListener do botão respectivo (“else if(ccf.getSource() == btn100) dcpls();”)
Desde então, apenas o campo “visor” sofre alteração de casas decimais quando clico nos botões que aumenta/diminui o número de casas.
Seguem os trechos do código:
private JTextField display, input, output, memorybox;
private String vldisplay = "0,00", vlinput = "0,00", vloutput = "0,00", vlmemory = "0,00";
private int vldecimals = 2;
public void numbr(String s) {
if(vldisplay == "0,00") vldisplay = "";
vldisplay = vldisplay + s;
display.setText(formatStrNum(vldisplay, vldecimals));
}
public void comma() {
vldisplay = vldisplay + ".";
display.setText(formatStrNum(vldisplay, vldecimals));
}
public void dcpls() {
if(vldisplay == "0,00") vldisplay = "0";
if(vlinput == "0,00") vlinput = "0";
if(vloutput == "0,00") vloutput = "0";
if(vlmemory == "0,00") vlmemory = "0";
if(vldecimals < 9) {
vldecimals = vldecimals + 1;
decimals.setText(String.valueOf(vldecimals));
display.setText(formatStrNum(vldisplay, vldecimals));
input.setText(formatStrNum(vlinput, vldecimals));
output.setText(formatStrNum(vloutput, vldecimals));
memorybox.setText(formatStrNum(vlmemory, vldecimals));
}
else {
vldecimals = vldecimals;
decimals.setText(String.valueOf(vldecimals));
display.setText(formatStrNum(vldisplay, vldecimals));
input.setText(formatStrNum(vlinput, vldecimals));
output.setText(formatStrNum(vloutput, vldecimals));
memorybox.setText(formatStrNum(vlmemory, vldecimals));
}
}
public void dclss() {
if(vldisplay == "0,00") vldisplay = "0";
if(vlinput == "0,00") vlinput = "0";
if(vloutput == "0,00") vloutput = "0";
if(vlmemory == "0,00") vlmemory = "0";
if(vldecimals > 0) {
vldecimals = vldecimals - 1;
decimals.setText(String.valueOf(vldecimals));
display.setText(formatStrNum(vldisplay, vldecimals));
input.setText(formatStrNum(vlinput, vldecimals));
output.setText(formatStrNum(vloutput, vldecimals));
memorybox.setText(formatStrNum(vlmemory, vldecimals));
}
else {
vldecimals = vldecimals;
decimals.setText(String.valueOf(vldecimals));
display.setText(formatStrNum(vldisplay, vldecimals));
input.setText(formatStrNum(vlinput, vldecimals));
output.setText(formatStrNum(vloutput, vldecimals));
memorybox.setText(formatStrNum(vlmemory, vldecimals));
}
}
public void enter() {
vlinput = display.getText();
input.setText(vlinput);
vldisplay = "0";
display.setText(formatStrNum(vldisplay, vldecimals));
}
public void bkspc() {
if(vldisplay.length() == 1) vldisplay = "0";
else vldisplay = vldisplay.substring(0, vldisplay.length() -1);
display.setText(formatStrNum(vldisplay, vldecimals));
}
public void cldpy() {
vldisplay = "0";
display.setText(formatStrNum(vldisplay, vldecimals));
}
public void clall() {
vldisplay = "0";
display.setText(formatStrNum(vldisplay, vldecimals));
vlinput = "0";
input.setText(formatStrNum(vlinput, vldecimals));
vloutput = "0";
output.setText(formatStrNum(vloutput, vldecimals));
vlmemory = "0";
memorybox.setText(formatStrNum(vlmemory, vldecimals));
}
public String formatStrNum(String s, int d) {
DecimalFormat dec = new DecimalFormat();
DecimalFormatSymbols sym = new DecimalFormatSymbols();
sym.setGroupingSeparator('.');
sym.setDecimalSeparator(',');
dec.setMinimumFractionDigits(d);
dec.setMaximumFractionDigits(d);
dec.setDecimalFormatSymbols(sym);
return dec.format(new java.math.BigDecimal(s));
}
Agradeço antecipadamente a ajuda que algém possa me dar.
Abraço,
ffranco