入門 Javaアプリ
[1] 文字列と線分の表示

1.必要最小限の準備(使っているパソコンで、既にJavaが実行できるようになっているものとします。)
テキストエディタ・・・Javaのプログラムを書きます。(拡張子は.javaとして保存)
javac・・・・・・・・・・・Java コンパイラ
java・・・・・・・・・・・・Javaを実行するプログラム
サンプルプログラム
grtest.java ・・・・・・ソースプログラム (テキスト)
grtest.class・・・・・・Javaアプリ (バイナリー) grtest.java を
javac でコンパイルするとできる。
2.サンプルプログラムの実行
(1) サンプルプログラム(grtest.class)を適当なフォルダー(ディレクトリ)にコピー 例えば、 grtest
というフォルダー
(2) コマンドコンソール(ターミナル)を開き、 (1) のフォルダーに移動
例: cd grtest
(3) grtest.classを実行
コマンドラインに、 java grtest と入力すれば、小さいウィンドウが表示され、その中に文字列と線分が表示される。
(4) grtest.class の終了
ウィンドウを閉じる×を押しても閉じない。(閉じれるように設定することは可能)
コマンドラインに、ctrl+c で終了できる。
3.プログラムの変更から実行まで
(1) テキストエディタで、grtest.java を再編集
文字列や線分の場所などを変更してみる。
(2) コンパイル
コマンドラインに javac grtest.java と入力
エラーがあれば、そのようなメッセージが出るので修正する。
エラーがなければそのまま自動的に終了する。 → grtest.class
ができている。 これを、(3)で実行する
grtest.java コンパイルすると → grtest.class
ができる。
(3) 実行
コマンドラインに、 java grtest と入力
先ほど変更した箇所がうまく表示されておれば成功
このJavaアプリ、 grtest は、OSに依存しませんので、Windows,Mac,Linuxなどで同じように実行できます。
アンドロイドの場合は、よく知りませんが、アンドロイド用にコンパイラしなければならないのかもしれません。あとで調べてみます。
import java.awt.*;
public class grtest extends Frame {
grtest()
{
// コンストラクタ、フレームの定義
this.setSize(400,400);
this.setVisible(true);
}
public static void main(String[] a) {
new grtest();
}
public void paint(Graphics g)
{
// paint() メソッドの実装
g.drawString("これは
JAVAアプリのグラフィックサンプルです。 T.Tarui", 10, 50); //
文字を書くためのメソッド
g.drawString("プログラムを終了するには、ターミナルで、 ctrl+c です。", 10, 80);
g.drawLine(10,100,100,200);
}
}
grtest2.java swingを使うと×ボタンで窓を閉じることができるようになる。
→ grtest2.java としました。 コンパイルして確認してください。
import java.awt.*;
import
javax.swing.*;
// 追加分
public class grtest2
extends JFrame { //Frame を JFrame にする。
grtest2()
{
// コンストラクタ、フレームの定義
this.setSize(400,400);
this.setVisible(true);
}
public static void main(String[] a) {
new grtest2();
}
public void paint(Graphics g)
{
// paint() メソッドの実装
g.drawString("これは
JAVAアプリのグラフィックサンプルです。 T.Tarui", 10, 50); //
文字を書くためのメソッド
//
g.drawString("プログラムを終了するには、ターミナルで、 ctrl+c です。", 10,
80); ← 不要になりました。
g.drawLine(10,100,100,200);
}
}
※ 上記の一連の作業を便利にやってくれる、IDE(統合開発環 境)がいろいろありますが、フリーのもので有名なのは、
Eclipse です。
ソースプログラム作成→コンパイル→実行という仕組みがわかれば、Eclipseをインストールして使うと便利さがわかります。
→HomePage
[2] ボタンとイベント処理

ボタンを押すとラベルが変わるクラスです。 ButtonSample.java
import
java.awt.*; //awtはAbstract Window Toolkit
といって、JavaのGUIをサポートするパッケージ。これをインポート
import java.awt.event.*; //ボタンを押したらどうする、などのイベント処理のパッケージ
import javax.swing.*; //awt
を拡張してもっと便利なメソッドなどを加えたパッケージ、かな?
import javax.swing.JButton; //swingで設定されているボタン
import javax.swing.JFrame;
//swingで設定されているフレーム(Windowのこと)
public class ButtonSample extends JPanel implements ActionListener{
JLabel label; //ラベル用変数
JButton btn;
//ボタン用変数
public ButtonSample(){
label=new JLabel("ようこそJavaの世界へ!
ボタンのサンプルですよ"); // 元のラベル
btn=new JButton("押してみて!"); //ボタンの生成
btn.addActionListener(this); //イベントリスナー設定
setLayout(new BorderLayout());
//ボタンやラベルの配置をBorderレイアウトに
add(label,BorderLayout.NORTH); // ラベルを上に
add(btn,BorderLayout.CENTER); //
ボタンを真ん中に
}
public void actionPerformed(ActionEvent
e){ //イベント処理のメソッド
if(e.getSource()==btn){
//ボタンが押されたら
label.setText("\(^o^)/");
}
}
// 以下 main メソッド (お決まりの形)
public static void main(String[] args) {
JFrame frame = new
JFrame("ButtonSample 2012 T.Tarui");
//ウィンドウタイトル
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//×で窓を閉じられるように
ButtonSample bs = new
ButtonSample(); //ButtonSample のインスタンス bs の生成
frame.add(bs,BorderLayout.CENTER);
//bs をborderLayout形式のレイアウトでこのframeのセンターに配置
frame.pack();
// frameをフィットさせる? よく分かりません(^^);
frame.setVisible(true);
// このframeを見えるようにする
}
}
これを、「1」の3で説明したように、コンパイルして実行すると
上のようなWindowが現れて、ボタンを押すとラベルが変わります。
(私自身はEclipse でその作業をやってますが、一応コマンドコンソールでもテストはしてます。 →私がコンパイルした ButtonSample.class)
→HomePage
[3] ボタンを押すと直線を描画
ボ
タンを押すと直線を描くクラスです

BtnAndLine.java → コンパイルすると → BtnAndLine.class
import
java.awt.*; //awtはAbstract
Window Toolkit といって、JavaのGUIをサポートするパッケージ。これをインポート
import
java.awt.event.*;//ボタンを押したらどうする、などのイベント処理のパッケージ
import
javax.swing.*; //awt
を拡張してもっと便利なメソッドなどを加えたパッケージ、かな?
public class BtnAndLine
extends JPanel implements ActionListener {
Ar
area;
// area という変数を、Ar というクラス(Frame用のクラスで下で定義している)のインスタンスとする
JButton btn,btn2; // ボタンを2つつくる
int
z; //変数 z
を宣言・・・これが1なら直線を引く。0なら消す。
public
BtnAndLine(){
JPanel p = new JPanel(); //ボタン用パネル
btn = new JButton("直線");btn2=new JButton("消す");
//ボタン2つ
btn.addActionListener(this);btn2.addActionListener(this);
//ボタンを押したらそれがわかるようにする。
p.setBackground(Color.cyan);
//p という名前をつけたパネル(Frameの下の部分でボタンを置く)を水色に
p.add(btn);p.add(btn2); //パネルpに2つのボタンを置く
area = new Ar();
setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
//縦に配置
add(area); //Frameの上部に area というパネルを置く
add(p); // p というyパネルを置く
}
//Action(ボタンを押すなど)が行われた時の処理
public
void actionPerformed(ActionEvent e) {
if (e.getSource()==btn){
//ボタンを押したという情報が入ったら
z=1;
//zに 1 を代入
setBackground(Color.blue);
//グラフィックの初期値 何色でもよいが、これがないとなぜか線蛾引けない???
}
//これで悩んでたが、どうもグラフィックスの初期値のようなものが必要みたい。
else if (e.getSource()==btn2){
z=0;
// z に 0 を代入
setBackground(Color.green); //グラフィックの初期値
これがないと線が消せない。上のと違う色でないとだめのようだ??
}
}
class
Ar extends JPanel { //パネル Ar の定義
Ar(){
setBackground(Color.white);
//背景色
setPreferredSize(new Dimension(300,200));
//Frameのサイズ
}
public void paintComponent(Graphics g){ //
paintコンポーネントを準備(グラフィックスを使うのに必要みたい)
super.paintComponent(g);
// paintComponent を継承の上位クラスとする、かな?
if (z==1)
{
//もし z=1 なら線を引く
g.drawLine(50,50,200,150);
}
}
}
//
mainクラス
public
static void main(String[] args)
{
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("BtnAndLine
2012 T.Tarui"); //Wiodow をつくる
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//×ボタンでW終われるようにする。
BtnAndLine e = new
BtnAndLine();
//上のクラスBtnAndLineを生成
frame.add(e,BorderLayout.CENTER);
//frameをBorderLayoutのレイアウトにする
frame.pack();
frame.setVisible(true);
}
}
コマンドコンソール(ターミナル)でコンパイル、実
行する方法 ※
統合開発環境eclipseなどを利用する方法もあります。
コンパイル → javac
BtnAndLine.java
実行 →
java BtnAndLine
→HomePage
[4] キーボード
から値を入力

square.java 入力した数値を2乗するだけのクラスです。 square.class
import
java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class square extends JPanel implements
ActionListener {
JTextField nyuuryoku; //入力フィールド
JLabel
nijou;
//ラベル
double
x;
// 入力値
public square(){
setBackground(Color.white);
nyuuryoku=new JTextField(10);
nijou=new JLabel();
nyuuryoku.addActionListener(this);
setLayout(new GridLayout(2,2));
add(new
JLabel("x=?"));add(nyuuryoku);
add (new JLabel("x^の2乗は "));
add(nijou);
}
public void actionPerformed(ActionEvent e){
try{
x=Double.parseDouble(nyuuryoku.getText());
}
catch(NumberFormatException
error){x=0.0;}
keisan();
}
void keisan(){
double kekka = x*x;
nijou.setText(String.valueOf(kekka));
}
public static void main(String[] args)
{
JFrame frame = new
JFrame("2乗を求める");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
square h = new square();
frame.add(h,BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
}
→HomePage