入門  Javaアプリ

[1] 文字列と線分の表示

grtest.jpg

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

ボタンを押すとラベルが変わるクラスです。     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
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.jpg

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