Program okienkowy obliczający wskaźnik BMI

0

Hej zaczynam od prostych programów okienkowych w Javie, nie mogę dojść do tego, jak wyświetlić wynik końcowy a jak już się wyświetla to jest zły?

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Wskaznik extends JFrame implements ActionListener {

	JLabel waga, wzrost;
	JTextField twaga, twzrost, wynik;
	double tempwaga, tempwzrost, twynik;
	JButton oblicz;
	
	public Wskaznik(){
		
		setSize(600, 600);
		setTitle("Oblicz swój wskaźnik BMI");
		setLayout(null);
		
		waga = new JLabel("Wpisz swoją wage w kg");
		waga.setBounds(50, 50, 200, 200);
		add(waga);
		
		wzrost = new JLabel("Wpisz swój wzrost w cm");
		wzrost.setBounds(50, 60, 200, 100);
		add(wzrost);
		
		twaga = new JTextField(" ");
		twaga.setBounds(200, 100, 130, 20);
		add(twaga);
		twaga.addActionListener(this);
		
		twzrost = new JTextField(" ");
		twzrost.setBounds(200, 140, 130, 20);
		add(twzrost);
		twzrost.addActionListener(this);
		
		wynik = new JTextField(" ");
		wynik.setBounds(200, 170, 130, 20);
		add(wynik);
		wynik.addActionListener(this);
		
		oblicz = new JButton("Oblicz");
		oblicz.setBounds(200, 200, 40, 20);
		add(oblicz);
		oblicz.addActionListener(this);
		
	}
	
	public static void main(String arg[]){
		Wskaznik b = new Wskaznik();
		b.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		b.setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		
		tempwaga = Double.parseDouble(twaga.getText());
		tempwzrost = Double.parseDouble(twzrost.getText());
		twynik = tempwaga/(tempwzrost*tempwzrost);
		twzrost.setText(String.valueOf(twynik));
	}

}

0
@Override
public void actionPerformed(ActionEvent e) {
	
	tempwaga = Double.parseDouble(twaga.getText());
	tempwzrost = Double.parseDouble(twzrost.getText());
	twynik = tempwaga/(tempwzrost*tempwzrost);
	wynik.setText(String.valueOf(twynik)); // zamiast twzrost.setText(String.valueOf(twynik));
}

chyba powinieneś wstawić wynik do pola z wynikiem a nie wzrostem
Dodatkowo do takich obliczeń nie używaj typu double. Spróbuj z BigDecimal.

Edit:
Masz namieszane w kolejności kontrolek. Przy labelu ze wzrostem masz textField waga i na odwrót

0

Wynik jest zły bo są na odwrót rozmieszczone pola tekstowe. Typ double jest zupełnie wystarczający do tych obliczeń, zresztą float też.

0
bames napisał(a):

Wynik jest zły bo są na odwrót rozmieszczone pola tekstowe. Typ double jest zupełnie wystarczający do tych obliczeń, zresztą float też.

Poprawiłam ale w dalszym ciągu nie zgadza mi się wynik.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Wskaznik extends JFrame implements ActionListener {

	JLabel waga, wzrost, lwynik;
	JTextField twaga, twzrost, wynik;
	double tempwaga, tempwzrost, twynik;
	JButton oblicz;
	
	public Wskaznik(){
		
		setSize(600, 600);
		setTitle("Oblicz swój wskaźnik BMI");
		setLayout(null);
		
		waga = new JLabel("Wpisz swoją wage w kg");
		waga.setBounds(50, 50, 200, 200);
		add(waga);
		
		wzrost = new JLabel("Wpisz swój wzrost w cm");
		wzrost.setBounds(50, 60, 200, 100);
		add(wzrost);
		
		twaga = new JTextField(" ");
		twaga.setBounds(200, 100, 130, 20);
		add(twaga);
		twaga.addActionListener(this);
		
		twzrost = new JTextField(" ");
		twzrost.setBounds(200, 140, 130, 20);
		add(twzrost);
		twzrost.addActionListener(this);
		
		lwynik = new JLabel("Wynik ");
		lwynik.setBounds(160, 170, 130, 20);
		add(lwynik);
		
		wynik = new JTextField(" ");
		wynik.setBounds(200, 170, 130, 20);
		add(wynik);
		wynik.addActionListener(this);
		
		oblicz = new JButton("Oblicz");
		oblicz.setBounds(200, 200, 40, 20);
		add(oblicz);
		oblicz.addActionListener(this);
		
	}
	
	public static void main(String arg[]){
		Wskaznik b = new Wskaznik();
		b.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		b.setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		tempwaga = Double.parseDouble(twaga.getText());
		tempwzrost = Double.parseDouble(twzrost.getText());
		twynik = tempwaga/(tempwzrost*tempwzrost);
		wynik.setText(String.valueOf(twynik));
	}

}
1

Uruchomiłem ten kod i w dalszym ciągu jak wpiszę tam gdzie ma być wzrost wagę w kg a tam gdzie ma być waga wzrost w m to wynik jest poprawny

Tutaj masz działający kod, po prostu zamieniłem pozycje pól tekstowych i dodatkowo sformatowałem wynik

public class Wskaznik extends JFrame implements ActionListener {

  JLabel waga, wzrost, lwynik;
  JTextField twaga, twzrost, wynik;
  double tempwaga, tempwzrost, twynik;
  JButton oblicz;

  public Wskaznik(){

    setSize(600, 600);
    setTitle("Oblicz swój wskaźnik BMI");
    setLayout(null);

    waga = new JLabel("Wpisz swoją wage w kg");
    waga.setBounds(50, 50, 200, 200);
    add(waga);

    wzrost = new JLabel("Wpisz swój wzrost w cm");
    wzrost.setBounds(50, 60, 200, 100);
    add(wzrost);

    twaga = new JTextField(" ");
    twaga.setBounds(200, 140, 130, 20);
    add(twaga);
    twaga.addActionListener(this);

    twzrost = new JTextField(" ");
    twzrost.setBounds(200, 100, 130, 20);
    add(twzrost);
    twzrost.addActionListener(this);

    lwynik = new JLabel("Wynik ");
    lwynik.setBounds(160, 170, 130, 20);
    add(lwynik);

    wynik = new JTextField(" ");
    wynik.setBounds(200, 170, 130, 20);
    add(wynik);
    wynik.addActionListener(this);

    oblicz = new JButton("Oblicz");
    oblicz.setBounds(200, 200, 40, 20);
    add(oblicz);
    oblicz.addActionListener(this);

  }

  public static void main(String arg[]){
    Wskaznik b = new Wskaznik();
    b.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    b.setVisible(true);
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    tempwaga = Double.parseDouble(twaga.getText());
    tempwzrost = Double.parseDouble(twzrost.getText());
    twynik = tempwaga/(tempwzrost*tempwzrost);

    wynik.setText(String.format("%2.2f",twynik));
  }

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1