単位の換算
便利なツール
円からドルへ、フィートからセンチメートルへ、華氏温度から摂氏温度へと世の中には単位の換算などで同じ計算を繰り返すことが多くあります。前回のCatText.javaに変更を加えてこのようなツールを作ります。
課題
![](images/FtoM.png)
ファイル名 KanSan.java
フィート(ft)からメートル(m)に単位を換算するツールを作ります。双方向で使えます。上部にフィートを入力して、[↓]ボタンを押すと下部にメートルがでます。逆に下部にメートルを入力して[↑]を押すと上部にフィートがでます。
フィート(ft)からメートル(m)へ変換するには0.3048をかけ,メートルからフィートへは0.3048で割ります。
基本方針と新規の学習事項
基本的にCatText.java,CatText2.javaを少し変えるだけです。
使っている部品は,次の5つです。
JTextField |
JButton | JLabel | JButton |
JTextField |
一点だけ新しいことを使っています。
![](images/TBorder.png)
これはJTextFieldにタイトル入りの枠線をつけたものです。たとえばmytext1をJTextFieldのインスタンスとして,次のように書きます。
mytext1.setBorder(BorderFactory.createTitledBorder("フィート"));
変更部分を順に説明
- import の部分はそのまま,javax.swing.*とjava.awt.*とjava.awt.event.*です,
- クラスの名前をKanSanにします。宣言部分はそのまま,extends JFrame と implements ActionListener をつけておきます。
- フィールドの部分には,上記の5つの部品を宣言しておきます。すなわちJTextField2つ,JButton2つ,JLabel1つです。適切なインスタンス名(変数名)をつけておきます。(以下の説明で使用するmytext1などの名前を使うならここでもmytext1と宣言しなければなりません)
- コンストラクタ名はクラス名と同じです。( )内はやはり空白です。
- 終了処理(setDefaultCloseOperation)を入れます。
- 5つの部品をnewで生成します。JTextFieldは幅を20桁程度にするために,JTextField(20)とすればよいでしょう。JButtonには"↓","↑"を書きます。「やじるし」で漢字変換します。JButton("↓")のようにします。JLabelには"単位の換算"と入れ,センタリングのため JLabel.CENTER も使っています。JLabel("単位の換算",JLabel.CENTER)のようにします。
- JTextFieldにタイトル入りの枠線をつけます。たとえばmytext1をJTextFieldのインスタンスとして,次のように書きます。(インスタンス名がtext1ならmytext1はtext1に書き換えます)
mytext1.setBorder(BorderFactory.createTitledBorder("フィート"));
2めはもちろんメートルにします。
- JTextField内を右寄せにします。これはCatText2.javaでやったものです。
mytext1.setHorizontalAlignment(JTextField.RIGHT);
- 5つの部品なのでBorderLayoutで配置できます。 CatText.javaはGridでしたが、BorderLayoutを使うことを指定します。
setLayout(new BorderLayout());
- BorderLayoutを使うと、addするときに位置を指定しなければなりません。例えば、
add(mytext1,BorderLayout.NORTH);
選択肢は NORTH WEST CENTER EAST SOUTH のどれかです。
- JButtonのインスタンスにaddActionListenerを付けます。これはCatText.javaのときと同様ですが、ボタンが2つあるので1つ加えます。
- actionPerformed(ActionEvent e)の行はそのままです。
- フィートからメートルに変換するボタンに処理を書きます。たとえば、
if (e.getSource() == mybutton1) {
double x;
x = Double.parseDouble(mytext1.getText());
mytext2.setText( Double.toString( x * 0.3048 ) );
}
- 2つめのボタンの時の処理も書きます。
else if (e.getSource() == mybutton2) {
ではじめ、mytext1,mytext2を書き換えて、かけ算を割り算にします。
- メインの部分を書きます。CatText.javaなどでやったのと同じく、インスタンスを一つ作るだけで終わりです。クラス名がKanSanであることを忘れずに。
確認
動くかどうか確認します。
- フィートに1000と入れて[↓]ボタンでメートルのところに304.8とでますか
- メートルに1と入れて[↑]ボタンでフィートのところに3.280839895013123とでますか
余裕があったら…
KanSan2.java
インチ(in)からセンチメートル(cm)へ変換
インチ(in)からセンチメートル(cm)へ変換するには2.54を乗算すればよい。
KanSan3.java
華氏(F)から摂氏(℃)へ変換。換算式は次の通り。
(華氏温度) = 1.8 * (摂氏温度) + 32
華氏温度は日本では全く使われないのですが、アメリカでは一般的な温度の単位で、日常会話で体温や気温を言うときにはこれを使います。旅行する人は知っておくとよいでしょう。Fで表します。(正しくは℃とおなじく°がつきます)、
もともとドイツのファーレンハイトという人が考えた単位で、氷に塩を混ぜて作られる0℃以下の低温を0F、人間の体温を100Fとしたのが始まりです。
Javaプログラミング
聖愛中学高等学校
http://www.seiai.ed.jp/
Feb. 2009 加筆