目次

インスタンスの名前を工夫する

プログラムが何をやっているかわかり易い名前にする

mytext1とかmybutton1とかの名前ではプログラムが複雑になると苦しくなってきます。インスタンス名は自由に決められるので、わかりやすく変えてみます。

例えば温度の換算で説明しましょう。華氏温度(℉)と摂氏温度(℃)の換算なのでFを入れるJTextFieldをmytext1でなくて、fahr、Cを入れるところをmytext2でなくてcelsとしました。語源が Fahrenheit と Celsius という人名なのですが、とりあえず1文字目が f か c かでわかります。

ボタンの名前も FからCへの換算をするボタンをf2c、CからFをc2fとしました。FtoCでもいいのですが、2とtoの発音が同じことからくるダジャレです。(forを4と書くのもよくあります)

こうしておくと、f2cボタンだったら、fahrから文字列をgetして、celsにsetするというのが間違いなく書けます。

if (e.getSource() == f2c) {
    double x;
    x = Double.parseDouble(fahr.getText());
    cels.setText( Double.toString( ( x - 32 ) / 1.8 ) );
}

ファイル名 KanSan3.java

華氏(F)から摂氏(℃)へ変換。換算式は次の通り。

(華氏温度) = 1.8 * (摂氏温度) + 32

華氏温度は日本では全く使われないのですが、アメリカでは一般的な温度の単位で、日常会話で体温や気温を言うときにはこれを使います。旅行する人は知っておくとよいでしょう。Fで表します。(正しくは℃とおなじく°がつきます)、

もともとドイツのファーレンハイトという人が考えた単位で、氷に塩を混ぜて作られる0℃以下の低温を0F、人間の体温を100Fとしたのが始まりです。

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

public class KanSan3 extends JFrame implements ActionListener{
    /* フィールド */
    JTextField fahr;  //Fahrenheit
    JTextField cels;  //Celsius
    JButton f2c;      //F to C
    JButton c2f;      //C to F
    JLabel label;

    /* コンストラクタ */
    public KanSan3(){
        setDefaultCloseOperation(EXIT_ON_CLOSE); //終了処理を追加
        fahr = new JTextField(20);
        cels = new JTextField(20);
        f2c = new JButton("↓");
        c2f = new JButton("↑");
        label = new JLabel("単位の換算",JLabel.CENTER);

        /*タイトル付き枠*/
        fahr.setBorder(BorderFactory.createTitledBorder("F"));
        cels.setBorder(BorderFactory.createTitledBorder("C"));

        /*右寄せ*/
        fahr.setHorizontalAlignment(JTextField.RIGHT);
        cels.setHorizontalAlignment(JTextField.RIGHT);

        /*配置*/
        setLayout(new BorderLayout());
        add(fahr,BorderLayout.NORTH);
        add(cels,BorderLayout.SOUTH);
        add(label, BorderLayout.CENTER);
        add(f2c,BorderLayout.WEST);
        add(c2f,BorderLayout.EAST);

        /*イベント監視*/
        f2c.addActionListener(this);
        c2f.addActionListener(this);
        
        pack();
        setVisible(true);
    }
    /* イベントがあったらここに来る */
    public void actionPerformed(ActionEvent e) {
        /* F → C */
        if (e.getSource() == f2c) {
            double x;
            x = Double.parseDouble(fahr.getText());
            cels.setText( Double.toString( ( x - 32 ) / 1.8 ) );
        }
        /* C → F */
        else if (e.getSource() == c2f) {
            double x;
            x = Double.parseDouble(cels.getText());
            fahr.setText( Double.toString( x * 1.8 + 32 ) );
        }
    }
    /********* main **********/
    public static void main(String[] args){
        /* フレームを作成(事実上のプログラム実行) */
        KanSan3 myframe = new KanSan3();
    }
}
もくじ

聖愛高等学校
http://www.seiai.ed.jp/
Last Modified