Preciso digitar em 3 campos JTexfield

Acredito que seja um erro simples, é o seguinte, eu tenho 3 campos pra digitar no JTextField, sendo que o primeiro é a área, o segundo é a base e o terceiro é a hipotenusa. Eu só posso aceitar que o usuário digite 2 valores, se ele digitar a área e a base eu tenho que calcular a hipotenusa. Se digitar a hipotenusa e a área, eu tenho que calcular a base…
Está dando erro pra mim quando o usuário digita 1 ou nenhum valor, o resto está dando certo.

Observação: o campo JTextfield só vai aceita números, então não precisa se preocupar com isso, e não precisem se preocupar se a fórmula está correta.

package aulaSwing;

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

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

public class Hipotenusa extends TelaPadrao implements ActionListener {

	private double area, base, hipotenusa;
	private JTextField a, b;
	private JTextField h = null;
	private JLabel label = new JLabel();
	private JButton botao;

	public Hipotenusa() {

		setTitle("Calcular hipotenusa");
		Container container = getContentPane();
		setBounds(200, 150, 850, 500);

		a = criaCampoNumerico("Altura", 30, 140);
		saltaLinha();

		b = criaCampoNumerico("Base", 30, 140);
		saltaLinha();

		h = criaCampoNumerico("Hipotenusa", 30, 140);

		botao = new JButton("Calcular");
		botao.setBounds(300, 200, 120, 25);
		container.add(botao);
		botao.addActionListener(this);

		label.setBounds(150, 120, 220, 120);
		container.add(label);
		label.setBackground(Color.BLACK);

		setVisible(true);
	}

	public static void main(String[] args) {
		new Hipotenusa();

	}

	public void actionPerformed(ActionEvent e) {
		double aux;

		if (a.getText() !="" && b.getText() !="" && h.getText().equals("")) {
			System.out.println(a.getText());
			area = Double.parseDouble(a.getText());
			base = Double.parseDouble(b.getText());
			aux = (Math.pow(area, 2) + Math.pow(base, 2));
			hipotenusa = Math.sqrt(aux);
			label.setText("Hipotenusa: " + hipotenusa);
			System.out.println(b.getText());
		}

		else if (a.getText() !="" && h.getText() !="" && b.getText().equals("")) {
			area = Double.parseDouble(a.getText());
			hipotenusa = Double.parseDouble(h.getText());
			base = area * hipotenusa;
			label.setText("base: " + base);
			System.out.println(h.getText());
		}

		else if (b.getText() !="" && h.getText() !="" && a.getText().equals("")) {
			base = Double.parseDouble(b.getText());
			hipotenusa = Double.parseDouble(h.getText());
			area = base * hipotenusa;
			label.setText("area: " + area);
			System.out.println(b.getText());
		}

		else
			label.setText("Digite em 2 campos!");
	}

}

Tenho uma idéia, seguinte. Você pode adicionar um evento que quando o jTextfield perde o foco, ele calcule e preencha no outro campo.
Tipo Assim:

 private double area, base, hipotenusa;


private void jTextField1FocusLost(java.awt.event.FocusEvent evt) { // coloque um evento de foco para cada um dos jtextField
       if(!jTextfield1.getText().isEmpty()) {// verifica se é diferente de vazio
                 area = Double.parseDouble(jTextField1.getText());
        }else{
                 area = 0;
        }
        verificaCampos(); // este metodo serve para verificar se pelo menos dois ja foram preenchidos
}

private verificaCampos(){
    if(area > 0 && base > 0){
        aux = (Math.pow(area, 2) + Math.pow(base, 2));
        hipotenusa = Math.sqrt(aux); // ae vc printa o resultado
    }else if (hipotenusa> 0 && base > 0){
        area = base * hipotenusa; // printa o resultado
    }else if (hipotenusa> 0 && area> 0){
        area = base * hipotenusa;
    }
}