IMC calculatrice graphique de Java;

J'ai voulu créer un IMC calculatrice en utilisant l'interface graphique en Java. Je suis très nouveau à l'interface utilisateur et même Java. La calculatrice est supposer pour l'affichage de l'IMC avec des conseils et même l'heure et la date. Toutefois, seul l'IMC est de s'afficher pendant que le reste ne peut pas.. j'ai été à la recherche en ligne sur la façon d'afficher les résultats à partir de si la condition else en ligne, mais en vain. C'est mon code;

public class BMI extends JFrame implements ActionListener {
private static final JButton JButton = null;
private JFrame frame;
private JPanel panel;
private JLabel heightLabel, weightLabel, BMILabel;
private JTextField height, weight, result;
private JButton calculate;
String Height, Weight;
double number1, number2, BMI;
static String output = "Results";
static int jopIcon = JOptionPane.QUESTION_MESSAGE;
boolean bFlag = true; //state, true means no exception
public BMI() {
frame = new JFrame("BMI Calculator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//create labels for the height and weight textfields 
heightLabel = new JLabel("Your height in meters:");
weightLabel = new JLabel("Your weight in kilograms: ");
//create a "this is your BMI" label
BMILabel = new JLabel("Your BMI is ");
//create a result label to hold the BMI value
result = new JTextField("");
//create a JTextField to hold the person's height in kilograms
height = new JTextField(1);
//create a JTextField to hold the person's weight in metres
weight = new JTextField(1);
calculate = new JButton("Calculate BMI");
//set up the JPanel to go on the JFrame 
panel = new JPanel();
panel.add(heightLabel);
panel.add(height);
//add the weight label and weight textfield to the panel
panel.add(weightLabel);
panel.add(weight);
//add the button to the panel
panel.add(BMILabel);
//add the label that holds the result to the panel
panel.add(result);
//add the panel to the frame 
panel.add(calculate);
//add the BMI label to the panel
frame.getContentPane().add(panel);
JPanel p1 = new JPanel();
panel.setLayout(new GridLayout(4, 1));
add(p1, BorderLayout.SOUTH);
calculate.addActionListener(this);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setVisible(true);//important must HAVE@! if not GUI will not be display
}
public String getDateTime() {
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
return dateFormat.format(date);
}
public void calculateBMI(double number1, double number2) {
try {
BMI = number2 / ((number1) * 2);
} catch (NumberFormatException nfe) {
output += "\n\n Whoa! Input error: must enter valid integers";//if exception comes    out, prepare error message
jopIcon = JOptionPane.ERROR_MESSAGE;
}
}
public void calculate() {
Height = height.getText();
Weight = weight.getText();//declare the Height string with Jtext height
try {
number1 = Double.parseDouble(Height);
number2 = Double.parseDouble(Weight);//exception may come out
calculateBMI(number1, number2);
} finally {
if (BMI >= 27.5) {
output += "\n\n You're in the High Risk zone(UnHealthy). Please start losing weight! It's a MUST!";
} else if (BMI <= 23 || BMI < 27.4) {
output += "\n\n You're in the Moderate Risk zone. Please start going on diet and lose some weight";
} else if (BMI <= 18.5 || BMI < 22.9) {
output += " You're in the Low Risk zone(Healthy). Hopefully you can maintain this way! ^^";
} else if (BMI < 18.4) {
output += "\n\n You really need to start eating more. Too skinny and unhealthy for your body";
}
}
}
public static void main(String[] args) {
BMI bmi = new BMI();
}
@Override
public void actionPerformed(ActionEvent e) {
//call the calculate
this.calculate();
result.setText("" + BMI);
//TODO Auto-generated method stub
}
}
  • Si vous allez demander de l'aide gratuite, il n'est pas trop vous demander au moins essayer de post bien formaté code.
  • La solution consiste simplement à ajouter un composant qui permettra d'afficher les données que vous souhaitez afficher sur l'interface graphique, juste le même que vous utilisez pour afficher le poids, la taille, et le résultat. Vous savez déjà comment ajouter ces composants component swing jtextfield, de sorte qu'il devrait être facile pour vous d'ajouter plus de JTextFields ou JLabels pour afficher des informations supplémentaires, non?
  • Je ne vois pas où vous avez essayé de résoudre le problème, et de sorte que vous peut-être prématuré en venant ici. Pourquoi ne pas d'abord essayer d'afficher les informations supplémentaires, et seulement ensuite venir ici avec votre tentative, si votre tentative ne fonctionne pas?
  • J'aimerais commencer par avoir une lecture par le biais de Créer une interface graphique avec Swing, à l'Aide de Gestionnaires de Disposition et Un Guide Visuel pour les Gestionnaires de Mise en page. Envisage également de trouver des exemples de mises en page que vous aimez et essayer de les reproduire. Essayez en utilisant le composé de panneaux pour plus de mises en page complexes
  • C'est beaucoup de code pour passer à travers. L'esprit coupe que vers le bas un peu?
  • Je me contenterais pour la descente des conventions de nommage 😛
  • amen! Mais une requête à la fois. 🙂
  • Je voulais qu'il affiche dans les mêmes résultats component swing jtextfield.. j'ai essayé de changer de sortie+= résultats= mais erreur.
  • Je vais commencer la lecture de ce.. Merci..
  • la sortie est une Chaîne de caractères, et l'ajout d'une autre Chaîne, il ne changera rien à votre écran. Ce que vous devez faire est d'utiliser la Chaîne de définir le texte d'un component swing jtextfield ou un JLabel. Il faudra pour cela que vous appelez la setText(...) méthode sur la touche de l'un de ces composants.
  • en gros, comment faire pour afficher l'heure dans les résultats? public String getdatetime dans() { DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); Date = new Date(); return dateFormat.format(date); } Override public void actionPerformed(ActionEvent e) { //appel de la calculer.calculer(); résultat.setText("" + IMC); // TODO Auto-généré méthode stub } }
  • Si vous êtes concernés par l'affichage du temps dans vos résultats, alors pourquoi avons-nous besoin de regarder à travers des centaines de lignes de code? C'est ce que je veux dire par la coupe vers le bas; se concentrer uniquement sur la zone à problème de code. Cela rend plus facile pour vous de débogage et pour nous de répondre. 🙂
  • Je suis désolé.. je viens de finir de lire au sujet de nettoyage de code. Oui, essentiellement à propos de la date et de l'heure et aussi le si d'autre condition qui n'a pas de travail, juste maintenant. mais michael_s déjà vous aider à répondre à l'erreur car si d'autre.
  • Vous devez également déposer le extends JFrame. Ce n'est pas nécessaire et est beaucoup plus sujettes à l'erreur.

InformationsquelleAutor Khair | 2013-02-10