Aridity Index

건조지수(Aridity Index)를 구하고, 기후의 상태를 알려주는 프로그램을 작성한다.
AridityIndexFrame

(1) 사용자에게 연강수량(Precipitation)과 연평균기온(Temperature)를 입력 받는다. 연강수량의 단위는 mm이고, 연평균기온의 단위는 C이다.

(2) 건조지수를 다음 공식으로 계산하고 결과를 화면에 출력한다.
건조지수 De Martonne Aridity Index = Precipitation/ (Temperature + 10)

(3) 다음 기준에 따라 기후의 상태를 판단해서 화면에 출력한다.
AI >= 60 => Perhumid
30 <= AI < 60 => Humid
20 <= AI < 30 => SubHumid
15 <= AI < 20 => SemiArid
5 <= AI < 15 => Arid
AI < 5 => ExtremelyArid

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

//Class: AridityIndexCalculator
public class AridityIndexFrame extends JFrame implements ActionListener, KeyListener {
    JLabel label1 = new JLabel("연평균 온도 (C)"); // 레이블 초기화
    JLabel label2 = new JLabel("강수량 (mm)"); // 레이블 초기화
    JLabel label3 = new JLabel("건조지수 (LA)"); // 레이블 초기화

    JTextField textfield1 = new JTextField("0", 20); // 텍스트필드 초기화
    JTextField textfield2 = new JTextField("0", 20); // 텍스트필드 초기화
    JTextField textfield3 = new JTextField(20); // 텍스트필드 초기화

    JButton button1 = new JButton("확인"); // 버튼 초기화

    JPanel panel = new JPanel(); // 패널 초기화
    JPanel panel1 = new JPanel(); // 패널 초기화
    JPanel panel2 = new JPanel(); // 패널 초기화
    JPanel panel3 = new JPanel(); // 패널 초기화

    public AridityIndexFrame() {
        super("Aridity Index Frame");

        // frame
        panel1.add(label1);
        panel1.add(textfield1);

        panel2.add(label2);
        panel2.add(textfield2);

        panel3.add(label3);
        panel3.add(textfield3);

        panel.add(panel1);
        panel.add(panel2);
        panel.add(panel3);
        panel.add(button1);
        add(panel);

        // event
        textfield1.addKeyListener(this);
        textfield2.addKeyListener(this);
        button1.addActionListener(this);

        setSize(350, 200);
        setResizable(false);
        setVisible(true);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private double ToDouble(String str) {
        return Double.parseDouble(str);
    }

    public void actionPerformed(ActionEvent e) {
        JButton button = (JButton) e.getSource();
        if (button == button1) {
            this.dispose();
        }
    }

    public void keyTyped(KeyEvent e) {}
    public void keyReleased(KeyEvent e) {}
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_ENTER) {
            Toolkit.getDefaultToolkit().beep();
            System.out.println("ENTER pressed");
            JTextField textfield = (JTextField) e.getSource();
            double T = ToDouble(textfield1.getText());
            double P = ToDouble(textfield2.getText());
            textfield3.setText("" + AridityIndexCalculator.Martonne(T, P));
        }
    }

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