Report#5:GUIプログラム:講義資料を参考に、以下の課題を行え。{〜01/15(Mon)}
目次
1.偶数奇数判定プログラム(GUIaa)をタイプし、その動作を考察せよ。
1-1. ソースコード
1-2. 実行結果
1-3. 考察
2. 例外処理について、考察せよ。
3.上述のサンプルプログラムに出てきたGUI部品を、全て使ったプログラムを作成せよ。
3-1. ソースコード
3-2. 実行結果
3-3. 考察
4.摂氏から華氏、華氏から摂氏への温度換算ができるプログラムを作成せよ。
4-1. ソースコード
4-2. 実行結果
4-3. 考察
5.「電卓」プログラム。中身は自分の思うように。
5-1. ソースコード
5-2. 実行結果
5-3. 考察
6.感想
1.偶数奇数判定プログラム(GUIaa)をタイプし、その動作を考察せよ。
■ソースプログラム
GUIaa.java
import java.awt.*;
import java.awt.event.*;
public class GUIaa extends Frame {
Button b0 = new Button("Even/Odd?");
Label x0 = new Label("Type a number and press...");
TextField t0 = new TextField();
public GUIaa() {
setLayout(null);
add(t0); t0.setBounds(10, 40, 90, 30);
add(b0); b0.setBounds(110, 40, 80, 30);
add(x0); x0.setBounds(10, 80, 180, 30);
b0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
int i = (new Integer(t0.getText())).intValue();
t0.setText("");
if(i % 2 == 0) {
x0.setText(i + " is Even");
} else {
x0.setText(i + " is Odd");
}
}
});
}
public static void main(String[] args) {
Frame win = new GUIaa();
win.setSize(200, 150); win.setVisible(true);
win.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
}
}
}
|
■実行結果
•実行すると以下のようなウィンドウが表示される。

•任意の数値を入力すると、

•その数値が偶数(Even)か奇数(Odd)かを判定し、出力する。
■考察
•[extends Frame]で、既存のクラス(スーパークラス)Frameを元に、新しいクラス(サブクラス)を作成する。
•以下の部分でインスタンス変数としてボタン、表示欄、入力欄を生成している。
Button b0 = new Button("Even/Odd?");
Label x0 = new Label("Type a number and press...");
TextField t0 = new TextField(); |
•以下の部分で入力欄、ボタン、テキストを貼付けている。
add(t0); t0.setBounds(10, 40, 90, 30);
add(b0); b0.setBounds(110, 40, 80, 30);
add(x0); x0.setBounds(10, 80, 180, 30);
|
•b0ボタン(表示では、"Even/Odd?"と表示されている)ボタンを押したときのイベントを追加する。
テキストフィールドであるt0に入力された整数を、整数型の変数iに格納し、2で割った値の余りを判定する。
•mainメソッドでは、前述のオブジェクトを、変数winへ生成。ウィンドウの大きさ、視覚可を定義。
2. 例外処理について、考察せよ。
•例外とはプログラムを実行したときのエラーの事で、Javaでは、あらゆる種類の「想定外の事柄」(エラー等)はすべて例外(exception)と呼ばれる動作の発生によって通知される。
例外処理の構文
try {
(例外を発生する可能性のある処理)
}
catch (例外のタイプ2 変数名){
(例外のタイプ2が発生した時に処理)
}
catch (例外のタイプ2 変数名){
(例外のタイプ2発生した時に処理)
}
:
:
catch (例外のタイプn 変数名){
(例外のタイプnが発生した時に処理)
}
finally {
(例外発生の有無にかかあらず必ず実行する処理)
}
|
3.上述のサンプルプログラムに出てきたGUI部品を、全て使ったプログラムを作成せよ。
■ソースプログラム
.java
import java.awt.*;
import java.awt.event.*;
public class GUI extends Frame {
Label l0 = new Label("お名前");
Label l1 = new Label("性別");
Label l2 = new Label("コメント");
Label l3 = new Label("お住まい");
Label l4 = new Label("Question1");
TextField t0 = new TextField("");
Checkbox cb0 = new Checkbox("Yes");
Checkbox cb1 = new Checkbox("No");
TextArea ta = new TextArea("");
Button bu = new Button("Enter");
Choice ch0 = new Choice();
List ls = new List();
public GUI() {
setLayout(null);
add(l0);l0.setBounds(10 ,30 ,50 ,10);
add(l1);l1.setBounds( 320,30 ,50,10);
add(l2);l2.setBounds( 10,300, 60,10);
add(l3);l3.setBounds( 10, 90, 60,10);
add(l4);l4.setBounds(200,110,70,10);
add(t0);t0.setBounds( 10, 50, 300,10);
add(cb0);cb0.setBounds( 200,130, 70,40);
add(cb1);cb1.setBounds( 290,130, 70,40);
add(bu);bu.setBounds(170 ,470 , 50,20);
add(ta);ta.setBounds( 10, 340, 380,120);
add(ch0);ch0.setBounds( 320, 50, 60,10);
add(ls);ls.setBounds( 10, 110, 150,180);
ch0.add("男");ch0.add("女");
ls.add("北海道");
ls.add("青森");
ls.add("東京");
ls.add("名古屋");
ls.add("大阪");
ls.add("高知");
ls.add("福岡");
ls.add("沖縄");
}
public static void main(String[] args) {
Frame win = new GUI();
win.setSize(400,500 );
win.setVisible(true);
}
}
|
■実行結果
■考察
•サンプルプログラムに出てきたGUI部品
Label
List
Checkbox
Button
Choice
TextField
TextArea
を用いたプログラムである。
4.摂氏から華氏、華氏から摂氏への温度換算ができるプログラムを作成せよ。
■ソースプログラム
.java
import java.awt.*;
import java.awt.event.*;
public class ChTemp extends Frame {
Button b0 = new Button("華氏->摂氏");
Button b1 = new Button("摂氏->華氏");
Label x0 = new Label("Type a number");
TextField t0 = new TextField();
public ChTemp() {
setLayout(null);
add(t0); t0.setBounds(10, 40, 90, 30);
add(b0); b0.setBounds(110, 40, 90, 30);
add(b1); b1.setBounds(110, 65, 90, 30);
add(x0); x0.setBounds(10, 100, 180, 30);
b0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
double j = (new Double(t0.getText())).doubleValue();
double k;
k = (j - 32) * 0.555;
x0.setText(k + "℃");
}
});
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
double i = (new Double(t0.getText())).doubleValue();
double o;
o = (1.8 * i) +32;
x0.setText(o + "°F");
}
});
}
public static void main(String[] args) {
Frame win = new ChTemp();
win.setSize(200, 150); win.setVisible(true);
win.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
}
}
|
■実行結果
•プログラムを実行すると、以下のようなウィンドウが表示される。

•入力した値を華氏から摂氏に変換する場合の実行例である。
•変換した結果は、Labelのx0に示される。

•入力した値を摂氏から華氏に変換する場合の実行例である。
■考察
•ボタンb0("華氏->摂氏"と表示されているボタン)を押したとき、以下のイベントが発生する。
これは、TextFieldの値をdouble型の変数jに格納し、華氏温度を摂氏温度に変換する。
変換した結果は、Labelのx0に示される。
double j = (new Double(t0.getText())).doubleValue();
double k;
k = (j - 32) * 0.555;
x0.setText(k + "℃");
|
•ボタンb1("摂氏->華氏"と表示されているボタン)を押したとき、以下のイベントが発生する。
これは、TextFieldの値をdouble型の変数iに格納し、摂氏温度を華氏温度に変換する。
変換した結果は、Labelのx0に示される。
double i = (new Double(t0.getText())).doubleValue();
double o;
o = (1.8 * i) +32;
x0.setText(o + "°F");
|
•以下の部分で、ウィンドウを閉じるときのイベントを定義している。
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
|
5.「電卓」プログラム。中身は自分の思うように。
■ソースプログラム
.java
import java.awt.*;
import java.awt.event.*;
public class caluc extends Frame {
Button b0 = new Button("+");
Button b1 = new Button("×");
Button b2 = new Button("ー");
Button b3 = new Button("÷");
TextField t0 = new TextField();
TextField t1 = new TextField();
TextField t2 = new TextField();
Label l0 = new Label("Type a numbers");
public caluc() {
setLayout(null);
add(t0); t0.setBounds(10, 40, 90, 30);
add(t1); t1.setBounds(10, 80, 90, 30);
add(t2); t2.setBounds(185, 80, 90, 30);
add(b0); b0.setBounds(110, 40, 35, 35);
add(b1); b1.setBounds(110, 80, 35, 35);
add(b2); b2.setBounds(140, 40, 35, 35);
add(b3); b3.setBounds(140, 80, 35, 35);
add(l0); l0.setBounds(185, 45, 110,40);
b0.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try{
double i = (new Double(t0.getText())).doubleValue();
double h = (new Double(t1.getText())).doubleValue();
double s = i + h;
t2.setText("" + s);
}catch(Exception ex){
l0.setText("Please input number.");
t2.setText("");
}
}
});
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try{
double i = (new Double(t0.getText())).doubleValue();
double h = (new Double(t1.getText())).doubleValue();
double s = i - h;
t2.setText("" + s);
}catch(Exception ex){
l0.setText("Please input number.");
t2.setText("");
}
}
});
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try{
double i = (new Double(t0.getText())).doubleValue();
double h = (new Double(t1.getText())).doubleValue();
double s = i * h;
t2.setText("" + s);
}catch(Exception ex){
l0.setText("Please input number.");
t2.setText("");
}
}
});
b3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
try{
double i = (new Double(t0.getText())).doubleValue();
double h = (new Double(t1.getText())).doubleValue();
double s = i / h;
t2.setText("" + s);
}catch(Exception ex){
l0.setText("Please input number.");
t2.setText("");
}
}
});
}
public static void main(String[] args) {
Frame win = new caluc();
win.setSize(300, 150); win.setVisible(true);
win.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
}
}
|
■実行結果
•プログラムを実行すると、以下のようなウィンドウが表示される。

•プログラムを実行すると、以下のようなウィンドウが表示される。

•プログラムを実行すると、以下のようなウィンドウが表示される。
■考察
•TextFieldのt0とt1の値を、読み込んで四則演算を行いその結果を、TextFieldのt2に表示するGUIプログラムである。
•以下がボタンb0を押したときのイベントである。これは、TextFieldのt0にある値をdouble型の変数iに格納し、
TextFieldのt1にある値をdouble型の変数hに格納する。
変数iとhに格納した値を、加算演算しその結果をTextFieldのt2に表示する。
try{
double i = (new Double(t0.getText())).doubleValue();
double h = (new Double(t1.getText())).doubleValue();
double s = i + h;
t2.setText("" + s);
}catch(Exception ex){
l0.setText("Please input number.");
t2.setText("");
}
|
•以下がボタンb2を押したときのイベントである。これは、TextFieldのt0にある値をdouble型の変数iに格納し、
TextFieldのt1にある値をdouble型の変数hに格納する。
変数iとhに格納した値を、減算演算しその結果をTextFieldのt2に表示する。
try{
double i = (new Double(t0.getText())).doubleValue();
double h = (new Double(t1.getText())).doubleValue();
double s = i - h;
t2.setText("" + s);
}catch(Exception ex){
l0.setText("Please input number.");
t2.setText("");
}
|
•以下がボタンb1を押したときのイベントである。これは、TextFieldのt0にある値をdouble型の変数iに格納し、
TextFieldのt1にある値をdouble型の変数hに格納する。
変数iとhに格納した値を、乗算演算しその結果をTextFieldのt2に表示する。
try{
double i = (new Double(t0.getText())).doubleValue();
double h = (new Double(t1.getText())).doubleValue();
double s = i * h;
t2.setText("" + s);
}catch(Exception ex){
l0.setText("Please input number.");
t2.setText("");
}
}
|
•以下がボタンb3を押したときのイベントである。これは、TextFieldのt0にある値をdouble型の変数iに格納し、
TextFieldのt1にある値をdouble型の変数hに格納する。
変数iとhに格納した値を、除算演算しその結果をTextFieldのt2に表示する。
try{
double i = (new Double(t0.getText())).doubleValue();
double h = (new Double(t1.getText())).doubleValue();
double s = i / h;
t2.setText("" + s);
}catch(Exception ex){
l0.setText("Please input number.");
t2.setText("");
}
|
•それぞれの処理で例外処理を行っており、例外が発生した場合、"Please input number."という文字列をラベルl0に表示する。
感想
GUIプログラムになるとプログラムのレベルが上げってきて難しかったけど、楽しくなってきた。
SANSHIROU IWAI