Dúvida: Cor em JOptonPane

Estou escrevendo um código básico, para fazer cálculo de IMC, segue:

public static void main(String[] args) {
    
    String nome = JOptionPane.showInputDialog("Qual seu nome?");
    String id = JOptionPane.showInputDialog("Qual sua idade?");
    String ps = JOptionPane.showInputDialog("Qual seu peso? kg*");
    String alt = JOptionPane.showInputDialog("Qual sua altura? m*");
    String sex = JOptionPane.showInputDialog("Qual seu sexo? m ou f*");
    
    float peso = Float.parseFloat(ps);
    float idade =  Float.parseFloat(id);
    float altura=  Float.parseFloat(alt);
    char sexo = sex.charAt(0);
    float imc = peso/(altura*altura);
   
    if (sexo == 'm' || sexo == 'M'){
        if (imc > 0 && imc < 20){
            DecimalFormat df = new DecimalFormat("#0.00");
            JOptionPane.showMessageDialog(null,"Olá "+nome+", seu IMC é "+df.format(imc)+". Você está abaixo do peso.");
            System.exit(0);
        }
    
        if (imc < 24.9){
            DecimalFormat df = new DecimalFormat("#0.00");
            JOptionPane.showMessageDialog(null,"Olá "+nome+", seu IMC é "+df.format(imc)+". Você está com peso ideal.");
            System.exit(0);
        }
    
        if (imc <29.9){
            DecimalFormat df = new DecimalFormat("#0.00");
            JOptionPane.showMessageDialog(null,"Olá "+nome+", seu IMC é "+df.format(imc)+". Você está em sobrepeso.");
            System.exit(0);
        }
    
        if (imc >= 29.9){
            DecimalFormat df = new DecimalFormat("#0.00");
            JOptionPane.showMessageDialog(null,"Olá "+nome+", seu IMC é "+df.format(imc)+". Você está em obesidade.");
            System.exit(0);
        }
        if (nome == null){
            JOptionPane.showMessageDialog(null,"Você não preencheu seus dados corretamente.");
        }
    }    
    
    if (sexo == 'f' || sexo == 'F'){
        if (imc > 0 && imc < 19){
            DecimalFormat df = new DecimalFormat("#0.00");
            JOptionPane.showMessageDialog(null,"Olá "+nome+", seu IMC é "+df.format(imc)+". Você está abaixo do peso.");
            System.exit(0);
        }
    
        if (imc < 23.9){
            DecimalFormat df = new DecimalFormat("#0.00");
            JOptionPane.showMessageDialog(null,"Olá "+nome+", seu IMC é "+df.format(imc)+". Você está com peso ideal.");
            System.exit(0);
        }
    
        if (imc <28.9){
            DecimalFormat df = new DecimalFormat("#0.00");
            JOptionPane.showMessageDialog(null,"Olá "+nome+", seu IMC é "+df.format(imc)+". Você está em sobrepeso.");
            System.exit(0);
        }
    
        if (imc >= 28.9){
            DecimalFormat df = new DecimalFormat("#0.00");
            JOptionPane.showMessageDialog(null,"Olá "+nome+", seu IMC é "+df.format(imc)+". Você está em obesidade.");
            
            System.exit(0);
        }
        
    }
}
}

Gostaria de imprimir junto com o resultado, uma barrinha abaixo, com a cor verde caso o IMC estivesse bom, amarelo no caso de sobrepeso e vermelho no caso de obesidade.

Segue um exemplo:

Você pode estender o JFrame e tentar fazer um desenho customizado, modificando o que achar necessário.

Pode também criar uma instância ou estender de JDialog, que é mais completa (mais parecida com um JFrame), pode ser exibido modal (da mesma forma que o JOptionPane). Nele você pode adicionar e remover componentes, ajustar layouts, cores, etc.

Outra opção é você ir um pouco além e usar uma única tela (JFrame) para este exercício completo. Adicione JTextField para cada parâmetro e um JFrame para fazer o cálculo, exibindo em um JLabel (que pode ter a cor alterada). Ficaria mais interessante que abrir um monte de JOptionPanes em sequência.

Abraço.

Olá Leonam_Costa, eu não sei como colocar a barra, mas me ocorreu que pode ser trabalhado na caixa com o resultado, tipo:

JOptionPane.showMessageDialog(null, “Olá “+nome+”, seu IMC é “+df.format(imc)+”. Você está abaixo do peso.”, “Resultado”, JOptionPane.INFORMATION_MESSAGE );


JOptionPane.showMessageDialog(null, “Olá “+nome+”, seu IMC é “+df.format(imc)+”. Você está com peso ideal.”, "PARABENS ! ", JOptionPane.PLAIN_MESSAGE );


JOptionPane.showMessageDialog(null,“Olá “+nome+”, seu IMC é “+df.format(imc)+”. Você está em sobrepeso.”, “Resultado”, JOptionPane.WARNING_MESSAGE);


JOptionPane.showMessageDialog(null,“Olá “+nome+”, seu IMC é “+df.format(imc)+”. Você está em obesidade.”, “Resultado”, JOptionPane.ERROR_MESSAGE);

O resultado fica assim:

Abraço
Alex Andrade

1 curtida

Faça como o AlexAndrade escreveu, use os informativos (ícones) para cada tipo de condição.

  • JOptionPane.INFORMATION_MESSAGE
  • JOptionPane.PLAIN_MESSAGE
  • JOptionPane.WARNING_MESSAGE
  • JOptionPane.ERROR_MESSAGE

Abs,

Obrigado pela ajuda, gostei bastante da ideia.