Jlabel mostrar duas casas após a vírgula

26 respostas
T

olá pessoal!

qnd realizo a conta, às vezes o resultado é mto grande e acaba expandindo a jlabel. Gostaria de mostrar só dois valores após a vírgula.
Dei uma procurada na internet, mas td o q tentei não deu certo =/.
num tm como colocar máscara numa jlabel né?!

public String get_txta(){   
     return txta.getText( );
    }
 public String get_txtw(){
     return txtw.getText();

    }
    public String get_txtt(){
     return txtt.getText();

    }
    public String get_txtf(){
     return txtf.getText();

    }
    public String get_txtk(){
     return txtk.getText();

    }

 public void converte(){
   a = Double.parseDouble(get_a);
   w = Double.parseDouble(get_w);
   te = Double.parseDouble(get_t);
   f = Double.parseDouble(get_f);
   k = Double.parseDouble(get_k);

    }

public void calcula_v(){
   calc_v = (-a) * (w*(Math.PI)) * Math.sin(((w*(Math.PI))*te)+ (f *(Math.PI )));

 public void mostra_v(){
  // String.format("%2.f", calc_v);
 String conv_v = String.valueOf(calc_v);
 
 resposta.setText(conv_v);
 }

 public void actionPerformed(ActionEvent e) {
             get_a = get_txta();
             get_w = get_txtw();
             get_t = get_txtt();
             get_f = get_txtf();
             get_k = get_txtk();
             converte();
        }
        if (e.getSource() ==vrbutton ){ // JRadiobutton
            calcula_v();
            visible_v();
            mostra_v();

        }

26 Respostas

fernandopaiva

Se o problema for esse, basta vc colocar um JFormattedTextField desabilitado com a mascara, seria bem mais simples para se exibir e ainda mais estiloso. Sem contar na praticidade de se trabalhar.
t+

T

se num tiver jeito vou ter q colocar um JFormattedTextField, mas só se num tiver jeito msm… gostaria de mostrar na label msm e tbm queria saber como q faz p colocar só duas casas após a vírgula

brenowbc

olha, não sei se é certo, mas pra mostrar no system.out.println serve.

bem, o conteudo de um JLabel não é uma String??

então tenta isso:

double resultado = 2.83729101;    // so um valor de teste
JLabel label = new JLabel(String.format("%.2f", resultado);   o %.2f é que recebera um valor de casa decimal, e colocara dois digitos após a virgula (.2f)

o resultado saira 2.83 ou 2.84, depende se vai ter aproximação

um abraço, tomara que resolva.

EDIT: Testei aqui e deu certo com o meu JLabel. Tente ae e veja se ajuda.

T

brenowbc,

coloquei desse jeito private JLabel resposta = new JLabel(String.format("%.2f",calc_v)); logo dps do class nomedaclasse…
não dá erro, porém continua aparecendo mais de 10 casas após a vírgula =/

brenowbc

cara, eu testei aqui e deu certo.

você usa qual JDK, não sei ao certo, mas parece que tem que ser maior que da JDK 5 em diante.

eu testei aqui e deu certo, não tou entendendo isso ae não.

qualquer coisa instancia o JLabel vazio, e tenta o método do JLabel :

seuLabel.setText(String.format("%.2f" , valorDouble) ) ;

brenowbc

proooonto cara, ja sei.
como você tem metodos getters pra pegar esses resultados. coloca assim:

public String getValorTruncado( double Valor)
{
    return String.format("%.2f", Valor);
}

// ai no JLabel você coloca assim:

private JLabel label = new JLabel(getValorTruncado(Valor) );  // sendo esse Valor o Double a ser truncado

tenta isso kra, acho que dá certo.

T
public class applet extends JApplet{
   
   DrawControls controls;
  

   public void init() {
   setLayout(new BorderLayout());
   panel = new DrawPanel(null);
       controls = new DrawControls(panel);
   add("Center", panel);
   add("South",controls);

   }

   public void destroy() {
       remove(panel);
       remove(controls);
   }

   public static void main(String args[]) {

   JFrame f = new JFrame("Pêndulo tipo mola");
    applet drawTest = new  applet();
   drawTest.init();
   drawTest.start();

       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   f.add("Center", drawTest);
   f.setSize(500, 500);
   f.setVisible(true);

   }


class DrawControls extends JPanel implements ActionListener {

//botões
   private JButton iniciar = new JButton("Iniciar");
  private JButton pausar = new JButton("Pausar");
  private JButton continuar = new JButton("Continuar");

  //label
  
   private JLabel tempo = new JLabel("Tempo");
  
 


   //radiobutton
     JRadioButton vrbutton = new JRadioButton(v);
JRadioButton erbutton = new JRadioButton(el);
 JRadioButton trbutton = new JRadioButton(et);


    DrawPanel tread;

String get_a, get_w,get_t,get_f,get_k;

double a,w,te,k,f, calc_v, calc_x, calc_a;

double p;


 [b]private JLabel resposta = new JLabel(getValorTruncado(calc_v) );[/b]

   public DrawControls(DrawPanel target) {

             
       
    GridBagConstraints cons = new GridBagConstraints();
       GridBagLayout layout = new GridBagLayout();

       JPanel panel = new JPanel(layout);

       cons.fill = GridBagConstraints.BOTH;
       cons.gridy = 0;        cons.gridx = 0;

      panel.setPreferredSize(new Dimension(475,140));
   setBackground(Color.lightGray);


      //RAdio Button
      ButtonGroup group = new ButtonGroup();

     cons.gridx = 4; cons.gridy = 0;

   vrbutton.setBackground(Color.lightGray);

   panel.add(vrbutton, cons);
   group.add(vrbutton);


   cons.gridx = 4; cons.gridy = 1;

   erbutton.setBackground(Color.lightGray);

   panel.add(erbutton, cons);
   group.add(erbutton);



             
    
      vrbutton.addActionListener(this);
       erbutton.addActionListener(this);
        trbutton.addActionListener(this);



     }

   public String get_txta(){
    return txta.getText( );
   }

   public String get_txtw(){
    return txtw.getText();

   }
   public String get_txtt(){
    return txtt.getText();

   }
   public String get_txtf(){
    return txtf.getText();

   }
   public String get_txtk(){
    return txtk.getText();

   }

   public void converte(){
  a = Double.parseDouble(get_a);
  w = Double.parseDouble(get_w);
  te = Double.parseDouble(get_t);
  f = Double.parseDouble(get_f);
  k = Double.parseDouble(get_k);

   }

   public void calcula_v(){
  calc_v = (-a) * (w*(Math.PI)) * Math.sin(((w*(Math.PI))*te)+ (f *(Math.PI )));

   }


public void mostra_v(){
 // String.format("%2.f", calc_v);
String conv_v = String.valueOf(calc_v);

resposta.setText(conv_v);
}

public void mostra_x(){
String conv_x = String.valueOf(calc_x);
resposta.setText(conv_x);
}
 public void mostra_a(){
String conv_a = String.valueOf(calc_a);
resposta.setText(conv_a);
}


public void visible_v(){

lblv.setVisible(true);
ms.setVisible(true);


public void calcula_mostra_o(){

//faz a conta

}

public String getValorTruncado( double Valor)
{
    return String.format("%.2f", Valor);
}


    public void actionPerformed(ActionEvent e) {
            get_a = get_txta();
            get_w = get_txtw();
            get_t = get_txtt();
            get_f = get_txtf();
            get_k = get_txtk();
            converte();
            calcula_mostra_o();
Thread td = new Thread(tread);

       if (e.getSource() == iniciar)
       {
          DrawPanel chama = new DrawPanel(this);
          chama.get_v();
          td.start();
          pleasewait = false;
       }

       if (e.getSource() == pausar)
       {  pleasewait = true;

       }

       if (e.getSource() ==vrbutton ){
           calcula_v();
           visible_v();
           mostra_v();

       }
       if (e.getSource() == erbutton){
           calcula_x();
           visible_x();
           mostra_x();
       }
       if (e.getSource() == trbutton){
           calcula_x();
           calcula_a();
           visible_a();
           mostra_a();
       }
     }




    }




}

Coloquei p vc entender um pouco melhor, clico no radiobutton e na label resposta aparece o q foi calculado, do jeito q tá ae aparece esse erro Exception in thread “AWT-EventQueue-0” java.lang.RuntimeException: Uncompilable source code

obs: num postei o código inteiro pq ia fica mtoo grande, acho q postei o q interessava

brenowbc

então tem que ver direitinho ae, porque um JLabel recebe um String ta ligado, por isso que te mandei aquele codigo,
mas ae ja não sei como fazer direito não.
tou meio apressado, qualquer coisa eu vejo, mas tente ae, um JLabel recebe um String, então deve ta quase chegando,
so ver qual o erro direitinho.
vlw

JM4X
  1. Posta pra gente trecho de codigo proximo a linha que lançou exceção, e qual exceção foi lançada!

  2. String.format só funciona em JDK 1.5 em diante. Se a sua JDK for anterior a essa, terá de achar outra saída.

[]'s

T
mals gente.. dá erro qnd coloco assim
public DrawControls(DrawPanel target) {

       JLabel resposta = new JLabel(getValorTruncado(calc_v) );
se fizer assim, como tinha postado antes
JLabel resposta = new JLabel(getValorTruncado(calc_v) );

   public DrawControls(DrawPanel target) {

não dá erro porém tbm aparece cm mtas casas apos a virgula

to usando o netbeans e nele fala: Java: 1.6.0_20; OpenJDK

brenowbc

ahhhh, as vezes pode ser por causa da OpenJDK.
prefira a JDK original, eu tenho ela aqui, e as dicas que te passei do String.format funcionam tranquilamente.
tente coloca-la.
um abraço

T
public void mostra_v(){
 
resposta.setText(String.format("%.2f",calc_v));
}

assim num dá erro, mas tbm o q aparece na label é 0,00 (e o resultado conta não é esse )

esse OpenJDK deve ser pq to ubuntu, amanhã testo no win

brenowbc

tou ligado, so que assim, eu testei aqui, e ficou certinho, estranho que não esteja ficando.
tem que ver ae, porque aqui da certo, acho que pode ser a openJDK mesmo, eu usei ela uma vez
e num fui muito com a cara não rsrs.
abrç

JM4X

Se constatar que o motivo da diferença de resultados seria legal enviar essa informação pros caras da OpenJDK…

Assim eles consertariam, e outras pessoas (uma delas pode ser vc mesmo), um dia sendo obrigado a usar OpenJDK, não passaria por isso novamente.

^^ []'s

A comu agradece!

T
JLabel resposta = new JLabel(getValorTruncado(calcula_v()));

public String getValorTruncado( double Valor)
{     
    System.out.println(Valor);
    return String.format("%.2f", Valor);
}


public double calcula_v(){
  calc_v = (-a) * (w*(Math.PI)) * Math.sin(((w*(Math.PI))*te)+ (f *(Math.PI )));
return calc_v;
   }

essa foi a última coisa q testei até agora e continua aparecendo só 0,00, a resposta do System.out.println é -0.0
agora to no win, usando o netbeans cm Java: 1.6.0_23; Java HotSpot(TM)

Anime

Oi,

Não sei se é isso que vc quer, mas segue um exemplo…

import java.io. *;

class P30 {

        public static void main(String args[]) {
            String s;
            double not1, not2, not3, nota, mediap;
            int peso1, peso2, peso3;
            DataInputStream d;
            try {
                System.out.println("Digite a primeira nota entre 0 e 10");
                d = new DataInputStream(System.in);
                s = d.readLine();
                not1 = Double.parseDouble(s);
                System.out.println("Digite o primeiro peso entre 1 e 5");
                d = new DataInputStream(System.in);
                s = d.readLine();
                peso1 = Integer.parseInt(s);
                System.out.println("Digite a segunda nota");
                d = new DataInputStream(System.in);
                s = d.readLine();
                not2 = Double.parseDouble(s);
                System.out.println("Digite o segundo peso");
                d = new DataInputStream(System.in);
                s = d.readLine();
                peso2 = Integer.parseInt(s);
                System.out.println("Digite a terceira nota");
                d = new DataInputStream(System.in);
                s = d.readLine();
                not3 = Double.parseDouble(s);
                System.out.println("Digite o terceiro peso");
                d = new DataInputStream(System.in);
                s = d.readLine();
                peso3 = Integer.parseInt(s);
                System.out.println("A primeira nota digitada foi: " + not1);
                System.out.println("A segunda nota digitada foi: " + not2);
                System.out.println("A terceira nota digitada foi: " + not3);
                System.out.println("O primeiro peso digitado foi: " + peso1);
                System.out.println("O segundo peso digitado foi: " + peso2);
                System.out.println("O terceiro peso digitado foi: " + peso3);
                if ((not1 >= 0 && not1 <= 10 && not2 >= 0 && not2 <= 10 && not3 >= 0 && not3 <= 10 && peso1 >= 1 && peso1 <= 5 && peso2 >= 1 && peso2 <= 5 && peso3 >= 1 && peso3 <= 5)) {
                    mediap = ((not1 * peso1) + (not2 * peso2) + (not3 * peso3)) / (peso1 + peso2 + peso3);
                    mediap = (Math.ceil(mediap * 100 + 0.5) / 100);
                    System.out.println("A sua media e: " + mediap);
                    if (mediap <= 3.49) {
                        System.out.println("REPROVADO");
                    } else if ((mediap > 3.49) && (mediap <= 6.49)) {
                        System.out.println("RECUPERACAO");
                    } else {
                        System.out.println("APROVADO");
                    }
                } else {
                    System.out.println("Erro na entrada de dados");
                }
            } catch (IOException e) {
                System.out.println("erro na entrada de dados");
            } catch (NumberFormatException e) {
                System.out.println("erro de conversão");
            }
        }
    }
T

Anime,
não é exatamente isso, gostaria de q aparecesse só duas casas após a vírgual, por exemplo: se fosse 3,689999999884854784, mostrasse só 3,68 ou 3,69

mas obrigada pelo post não conhecia a Math.ceil()

Anime

Oi,

Essa linha faz isso, arredonda o numero com 2 casas decimais…

Ficaria assim…

public double calcula_v(){  
  calc_v = (-a) * (w*(Math.PI)) * Math.sin(((w*(Math.PI))*te)+ (f *(Math.PI )));  
  calc_v =(Math.ceil(calc_v * 100 + 0.5) / 100); 
return calc_v;  
   }

Faz um teste… :wink:

T

tentei e agora não aparece mais 0,00…
desse jeito aparece 0,01… deixando calc_v =(Math.ceil(calc_v )); aparece 1,00 o resultado seria pelo menos 3

Anime

Não deu certo… :roll:

O Math.ceil só arredonda o numero…

A sintaxe é assim…

calc_v =Math.ceil(calc_v ); // só tirar os parênteses
T
olha q estranho, testando desse jeito:
public double calcula_v(){
  calc_v = (-a) * (w*(Math.PI)) * Math.sin(((w*(Math.PI))*te)+ (f *(Math.PI )));
  System.out.println(calc_v);

 xx = 0.885650224; 
teste = new BigDecimal(xx);
teste = teste.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(teste);





  //calc_v =(Math.ceil(calc_v ));
return xx;
   }

a saída na label é 0,89 e as dos print são 3.077873109954864E-14 e 0.89

public double calcula_v(){
  calc_v = (-a) * (w*(Math.PI)) * Math.sin(((w*(Math.PI))*te)+ (f *(Math.PI )));
  System.out.println(calc_v);

 xx = 0.885650224; 
teste = new BigDecimal(calc_v);
teste = teste.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(teste);





  //calc_v =(Math.ceil(calc_v ));
return calc_v;
   }
se eu coloco calc_v na label aparece 0,00 e os prints 3.077873109954864E-14 e 0.00 não entendo mais nd :cry:
Anime

O Math.ceil é usado em variaveis do tipo double. Ai vc está usando BigDecimal.

Anime

Aqui chegaram em um resultado satisfatório, da uma olhada…

http://www.guj.com.br/java/223281-resolvidoformatacao-de-variavel-bigdecimal#1143677

T

Anime, cm o Math.ceil msm sendo p arrendondar não deu certo de 3.077873109954864E-14 ele tá indo p um o.O"

to tentando várias coisas, mas por enquanto nenhuma deu certo =/

vou dar uma lida no link q mandou :wink: brigada!

T
tentando de outro jeito:
if (e.getSource() ==vrbutton ){
          // calcula_v();
           visible_v();
           //mostra_v();


            calc_v = (-a) * (w*(Math.PI)) * Math.sin(((w*(Math.PI))*te)+ (f *(Math.PI )));
           
            System.out.println("antes do big "+calc_v);
              int decimalPlace = 2;
    BigDecimal bd = new BigDecimal(calc_v);
      System.out.println("meio do big "+calc_v);
    bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP);
    calc_v = bd.doubleValue();
      System.out.println("dps do big "+calc_v);



            resposta.setText(String.valueOf(calc_v));

       }

as respostas do prints:

antes do big 3.077873109954864E-14
meio do big 3.077873109954864E-14
dps do big 0.0

testei no netbeans do ubuntu e do windows, nos dois aparece o msm resultado

T

OI gente, descobri o erro =D

como o resultado da conta q fazia dava 3.07787310995486 4E-14 acho q dava algum problema na hora de converter (por causa do q tá em negrito), ao invés de usar a Math.pi, coloquei valendo pi = 3.1416 e pra converter:

calc_v = (-a) * w*(pi) * Math.sin(((w*(pi))*te)+ (f *(pi )));
          StringBuffer sb = new StringBuffer();

        Formatter out = new Formatter(sb);
        System.out.println(calc_v);
        out.format("%10.2f", calc_v);
        System.out.println(out);
resposta.setText(String.valueOf(out));

funciounou =D

Obrigada pela ajuda de vcs!

(tem q colocar resolvido no titulo da duvida?)

Criado 21 de julho de 2011
Ultima resposta 23 de jul. de 2011
Respostas 26
Participantes 5