作成 2010.01.23
更新 2010.01.23
Java の練習 Level 3
http://oshiete1.goo.ne.jp/qa5604930.html
問題

電卓の Java アプリケーションである。以下のコードに引き算と割り算の機能を追加して完成させよ。

Dentaku.java

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

public class Dentaku extends JFrame implements ActionListener {
  JTextField text1, text2;
  JButton button1, button2, button3;
  JLabel label;

  // コンストラクタ
  public Dentaku() {
    // コンテントペインを取得
    Container contentPane = getContentPane();
    // レイアウトマネージャーを設定
    contentPane.setLayout(new GridLayout(6,1));
    // テキストフィールド生成
    text1 = new JTextField("", 20);
    text2 = new JTextField("", 20);
    // テキストフィースドを追加
    contentPane.add(text1);
    contentPane.add(text2);
    // ボタンを作成
    button1 = new JButton("+");
    button2 = new JButton("x");
    button3 = new JButton("Clear");
    // アクションリスナーを登録
    button1.addActionListener(this);
    button2.addActionListener(this);
    button3.addActionListener(this);
    // ボタンを追加
    contentPane.add(button1);
    contentPane.add(button2);
    contentPane.add(button3);
    // ラベルを生成
    label = new JLabel("");
    // 文字を真ん中に表示
    label.setHorizontalAlignment(JLabel.CENTER);
    // ラベルを追加
    contentPane.add(label);
    // ウインドウが閉じられたときにアプリケーションを終了するように設定
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // サブコンポーネントの推奨サイズおよびレイアウトに合わせて
    // この Window をサイズ変更するように設定
    pack();
    // 表示します
    setVisible(true);
  }
  public static void main(String[] args) {
    // フレームを作成
    Dentaku frame = new Dentaku();
  }
  /**
   * アクションが発生すると呼び出されます。
   */
  public void actionPerformed(ActionEvent ae){
    // イベントが指定されたボタンで発生した場合
    //足し算
    if (ae.getSource().equals(button1)) {
      try{
        String tx1=text1.getText();
        String tx2=text2.getText();
        double d1=Double.parseDouble(tx1);
        double d2=Double.parseDouble(tx2);
        String answer=Double.toString(d1+d2);
        label.setText(answer);
      }catch (NumberFormatException e) {
        label.setText("数字を正しく入力してください。");
      }
    }
    //掛け算
    if (ae.getSource().equals(button2)) {
      try{
        String tx1=text1.getText();
        String tx2=text2.getText();
        double d1=Double.parseDouble(tx1);
        double d2=Double.parseDouble(tx2);
        String answer=Double.toString(d1*d2);
        label.setText(answer);
      }catch (NumberFormatException e) {
        label.setText("数字を正しく入力してください。");
      }
    } if (ae.getSource().equals(button3)) {
      text1.setText("");
      text2.setText("");
      label.setText("");
    }
  }
}
解答例
// Dentaku.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Dentaku extends JFrame implements ActionListener {
  JTextField text1, text2;
  JButton button1, button2, button3, button4, button5;
  JLabel label;

  // コンストラクタ
  public Dentaku() {
    // コンテントペインを取得
    Container contentPane = getContentPane();
    // レイアウトマネージャーを設定
    contentPane.setLayout(new GridLayout(6,1));
    // テキストフィールド生成
    text1 = new JTextField("", 20);
    text2 = new JTextField("", 20);
    // テキストフィースドを追加
    contentPane.add(text1);
    contentPane.add(text2);
    // ボタンを作成
    button1 = new JButton("+");
    button2 = new JButton("x");
    button3 = new JButton("Clear");
    button4 = new JButton("-");
    button5 = new JButton("/");
    // アクションリスナーを登録
    button1.addActionListener(this);
    button2.addActionListener(this);
    button3.addActionListener(this);
    button4.addActionListener(this);
    button5.addActionListener(this);
    // ボタンを追加
    contentPane.add(button1);
    contentPane.add(button2);
    contentPane.add(button4);
    contentPane.add(button5);
    contentPane.add(button3);
    // ラベルを生成
    label = new JLabel("");
    // 文字を真ん中に表示
    label.setHorizontalAlignment(JLabel.CENTER);
    // ラベルを追加
    contentPane.add(label);
    // ウインドウが閉じられたときにアプリケーションを終了するように設定
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // サブコンポーネントの推奨サイズおよびレイアウトに合わせて
    // この Window をサイズ変更するように設定
    pack();
    // 表示します
    setVisible(true);
  }
  public static void main(String[] args) {
    // フレームを作成
    Dentaku frame = new Dentaku();
  }
  /**
   * アクションが発生すると呼び出されます。
   */
  public void actionPerformed(ActionEvent ae){
    // イベントが指定されたボタンで発生した場合
    //足し算
    if (ae.getSource().equals(button1)) {
      try{
        String tx1=text1.getText();
        String tx2=text2.getText();
        double d1=Double.parseDouble(tx1);
        double d2=Double.parseDouble(tx2);
        String answer=Double.toString(d1+d2);
        label.setText(answer);
      }catch (NumberFormatException e) {
        label.setText("数字を正しく入力してください。");
      }
    }
    //掛け算
    if (ae.getSource().equals(button2)) {
      try{
        String tx1=text1.getText();
        String tx2=text2.getText();
        double d1=Double.parseDouble(tx1);
        double d2=Double.parseDouble(tx2);
        String answer=Double.toString(d1*d2);
        label.setText(answer);
      }catch (NumberFormatException e) {
        label.setText("数字を正しく入力してください。");
      }
    }
    //Clear
    if (ae.getSource().equals(button3)) {
      text1.setText("");
      text2.setText("");
      label.setText("");
    }
    //引き算
    if (ae.getSource().equals(button4)) {
      try{
        String tx1=text1.getText();
        String tx2=text2.getText();
        double d1=Double.parseDouble(tx1);
        double d2=Double.parseDouble(tx2);
        String answer=Double.toString(d1-d2);
        label.setText(answer);
      }catch (NumberFormatException e) {
        label.setText("数字を正しく入力してください。");
      }
    }
    //割り算
    if (ae.getSource().equals(button5)) {
      try{
        String tx1=text1.getText();
        String tx2=text2.getText();
        double d1=Double.parseDouble(tx1);
        double d2=Double.parseDouble(tx2);
        String answer=Double.toString(d1/d2);
        label.setText(answer);
      }catch (NumberFormatException e) {
        label.setText("数字を正しく入力してください。");
      }
    }
  }
}
解説のようなもの

コードが長いだけ。
button4, button5 を追加してイベントを追加、ペインに追加、イベント内容を記述。

タグ: Java

©2004-2017 UPKEN IPv4