490 likes | 632 Views
2014 年 夏 合宿 Java 入門講座. AL12011 池田貴明. Eclipse の使い方. ウィンドウ (W) →設定 (P) で設定ウィンドウを出して、 Java →エディター→コンテンツアシストにある「 Java の自動有効トリガー」を 「 ._ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 」に設定し、自動有効化遅延を「 5 0 」にする。. Eclipse の補完 機能. Eclipse の補完 機能.
E N D
2014年夏合宿Java入門講座 AL12011 池田貴明
ウィンドウ(W)→設定(P)で設定ウィンドウを出して、Java→エディター→コンテンツアシストにある「Javaの自動有効トリガー」をウィンドウ(W)→設定(P)で設定ウィンドウを出して、Java→エディター→コンテンツアシストにある「Javaの自動有効トリガー」を 「._abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ」に設定し、自動有効化遅延を「50」にする。 Eclipseの補完機能
「ファイル」→「新規 (N)」→「Javaプロジェクト 」 でプロジェクト名に適当な名前を入力して完了ボタンを押します。(例:2013Java講座) • 「ファイル」→「新規 (N)」→「クラス」で パッケージ名は空、クラス名には名前を入力して完了ボタンを押します。クラス名は大文字のほうが良いです。(例:Hello) クラスの作成
クラスを作成した時に public class Hello { } となっているはずなので、public class~のかっこの中に public static void main(String[] args) { System.out.println("Hello, world!"); } の3行を追加します。 Hello, world!
public static void main(String[] args) { } →「main」 System.out.println(“Hello, world!”); →「sysout」or「sys」で候補を選択 補完機能を使う
Ctrl+F11を押すか上のアイコンが並んでるところにある緑の‣ボタンを押します。Ctrl+F11を押すか上のアイコンが並んでるところにある緑の‣ボタンを押します。 • 下のコンソールにHello, world!と表示されればOKです。 プログラムの実行
クラスって?? →オブジェクトが持つ特徴や機能をまとめた設計書のようなもの。例えば車だと、ここが何センチで、色が何である、とかの「特徴」、アクセルを踏むと加速する、ブレーキを踏むと減速する、とかの「機能」、をまとめたもの。 • オブジェクトって?? →クラスをもとに作成した実体。実体なのでオブジェクトを生成したクラス内で、実際にメソッドやフィールドの実行、参照ができる。 クラスとオブジェクト
クラスは次の3つの部品から成り立っています。クラスは次の3つの部品から成り立っています。 • フィールド • メソッド • コンストラクタ クラス
オブジェクトの特徴を表したもの • C言語でいう変数です。 • 実際の書き方は次のスライドのようにします。 フィールド
public class SayHello { int i = 0; String s = "Hello!"; SayHello() { System.out.println(i + s); } void Meet(String name) { System.out.println(name + ", nice to meet you!"); } } フィールド フィールド
クラスは次の3つの部品から成り立っています。クラスは次の3つの部品から成り立っています。 • フィールド • メソッド • コンストラクタ クラス
オブジェクトの機能を表したもの • C言語でいう関数です。 • 実際の書き方は次のスライドのようにします。 メソッド
public class SayHello { int i = 0; String s = "Hello!"; SayHello() { System.out.println(i + s); } void Meet(String name) { System.out.println(name + ", nice to meet you!"); } } メソッド メソッド
クラスは次の3つの部品から成り立っています。クラスは次の3つの部品から成り立っています。 • フィールド • メソッド • コンストラクタ クラス
クラスに従ってオブジェクトを実体化させる(実際に作る)ことをインスタンス化と呼びます。クラスに従ってオブジェクトを実体化させる(実際に作る)ことをインスタンス化と呼びます。 • インスタンス化がおこなわれると、呼ばれたクラスの特別なメソッド(関数)であるコンストラクタというものが実行されます。この関数には初期化処理を書くことが多いです。 コンストラクタ
public class SayHello { int i = 0; String s = "Hello!"; SayHello() { System.out.println(i + s); } void Meet(String name) { System.out.println(name + ", nice to meet you!"); } } コンストラクタ コンストラクタ
Javaにはフィールドやメソッド、クラスの先頭につける修飾子というものがあります。Javaにはフィールドやメソッド、クラスの先頭につける修飾子というものがあります。 • アクセス修飾子(public, privateなど) →指定したものをどこから参照できるかを示す (publicはすべて、privateは自分のクラス内だけ)。何も書かないと同パッケージ内からだけ。 • スタティック修飾子(static) →指定したものをクラスに付随するものとする • ファイナル修飾子(final) →指定したものが変更されないようにする 修飾子
インスタンス化したオブジェクトのフィールド、メソッドは「.(ドット)」を使うことで参照できます。(例:engine.size、engine.start())インスタンス化したオブジェクトのフィールド、メソッドは「.(ドット)」を使うことで参照できます。(例:engine.size、engine.start()) • 基本的にインスタンス化していないオブジェクトのフィールド、メソッドにはアクセス(参照)ができません • ただし、static修飾子を用いた場合はアクセスができます。 注意点
最初のプログラムを次のように書き換えましょう最初のプログラムを次のように書き換えましょう public class Hello { public static void main(String[] args) { Human aru= new Human("アル"); System.out.println(aru.introduction()); aru.age= 14; System.out.println(aru.age); } } オブジェクトを作る
Humanに赤の波線(エラー)が出るはずなので、波線に合わせてマウスをポインタし、Humanクラスを作成ボタンを押します。Humanに赤の波線(エラー)が出るはずなので、波線に合わせてマウスをポインタし、Humanクラスを作成ボタンを押します。 • OKを押したら public class Human { } というHumanクラス(Human.java)が出来ているはずなので、Humanクラスの中に次の3行を追加します。 オブジェクトを作る
public class Human { String name; //フィールド int age; Human(String name) { //コンストラクタ this.name = name; } String introduction() { //メソッド return this.name + "です!よろしく!"; } } オブジェクトを作る 自分のクラスのこと(Human)
実行結果: アルです!よろしく! 14 クラスとオブジェクト
mainメソッドの最初の行 Human aru= new Human("アル"); でHumanクラス型のaruという名前のオブジェクトを作成していて、次の行の System.out.println(aru.introduction()); ではaruオブジェクトのintroductionメソッドを参照しています。 • 次の2行 aru.age= 14; System.out.println(aru.age); では、最初にaruのフィールド変数ageに14を代入してから次にその値を参照しています。 クラスとオブジェクト
お絵かきソフトを作るのに必要なもの • JFrame→ ウィンドウ関連 • paintメソッド → グラフィック関連 • MouseListener, MouseMotionListener →マウス関連 必要なもの
JFrameはフレームウィンドウを表示するためのクラスです。JFrameはフレームウィンドウを表示するためのクラスです。 • 使うためにはjavax.swing.JFrameをimport(C言語でいうinclude)しなければなりません。 • ウィンドウを簡単に扱えるようにするメソッドなどがたくさん含まれています。 JFrameとは
Helloクラスに次のように書き換えます。 public static void main(String[] args) { // オブジェクトを作るだけ new MyFrame("お絵かきソフト"); } JFrameを使う
新しくMyFrameクラスを作成し、次の行を追加します(MyFrame.java)。新しくMyFrameクラスを作成し、次の行を追加します(MyFrame.java)。 import java.awt.Color; import javax.swing.JFrame; public class MyFrameextendsJFrame { public MyFrame(String name) { //タイトル設定 setTitle(name); //×を押したときにプログラムを終了する setDefaultCloseOperation(EXIT_ON_CLOSE); //背景色 setBackground(new Color(255, 255, 255)); //ウィンドウサイズ setSize(400, 300); //ウィンドウを見えるようにする setVisible(true); } } 下のJFrameとColorで補完機能を使うと自動的に追加される JFrameを使う
画面左上に次のようなウィンドウが表示されると思います。×を押せば閉じます。画面左上に次のようなウィンドウが表示されると思います。×を押せば閉じます。 実行結果
さっきのextendsってなんぞ? →クラスの継承といいます。「クラス名 extends 親クラス名」と書くことで、クラスが親クラスのフィールドやメソッドをそのまま引き継ぐことができます。 さっきはJFrameクラスというウィンドウに関する機能をまとめたクラスを継承して、ウィンドウ操作に関する属性、メソッドを引き継ぎました。 クラスの継承
java.awt.Window.paint(Graphics g)のこと。ウィンドウの描画関係の処理を行います。 • 何ができるの? →ウィンドウ上に長方形、円などの図形を描いたり、色を変えたり • どうすれば使えるの? →JFrameを継承しているクラスでpaintメソッドをオーバーライド(機能を追記すること)すれば使えます paintメソッドとは
新しくMyFrameクラスを作成し、次の行を追加します(MyFrame.java)。新しくMyFrameクラスを作成し、次の行を追加します(MyFrame.java)。 import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; public class MyFrameextends JFrame{ (中略) @Override public void paint(Graphics g) { g.drawLine(0,0,100,100); repaint(); } } 下のpaintで補完機能を使うと自動的に追加される 下のpaintで補完機能を使うと自動的に追加される paintメソッドを使う
paintメソッドではウィンドウの左上が始点なので、変な位置から線が引かれます。paintメソッドではウィンドウの左上が始点なので、変な位置から線が引かれます。 実行結果
MouseListener →マウスがクリックされたことなどを監視するものです。 • MouseMotionListener →マウスがドラッグされたことや動かされたことを監視するものです。 • これらの、何かの動きを監視するものをインターフェースと呼びます。 MouseListener,MouseMotionListenerとは
MouseListenerなどのインターフェースをクラスに追加することを実装するといいます。MouseListenerなどのインターフェースをクラスに追加することを実装するといいます。 • JFrameをExtendsした時と同じように、クラス名の後に「implements MouseListener」と書けば実装できます。 • インターフェースを実装したクラスには、そのインターフェースのメソッドをすべて書く必要があります。 インターフェースとは
import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; public class MyListener implements MouseListener,MouseMotionListener{ int x1,x2,y1,y2; @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { x1 = x2 = e.getX(); y1 = y2 = e.getY(); } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } @Override public void mouseDragged(MouseEvent e) { x1 = x2; y1 = y2; x2 = e.getX(); y2 = e.getY(); } @Override public void mouseMoved(MouseEvent e) { } } 長い! インターフェースとは
Eclipseの補完機能をぜひ使いましょう • 「implements MouseListener,MouseMotionListener」と書き、MouseListenerの文字に赤い波線が出るので、マウスオンして「実装されていないメソッドの追加」をクリックします。MouseMotionListenerも同様にします。 インターフェースとは
新しくMyListenerクラスを作成し、以下の行を追加します。(MyListener.java)新しくMyListenerクラスを作成し、以下の行を追加します。(MyListener.java) public class MyListenerimplements MouseListener,MouseMotionListener{ int x1,x2,y1,y2; intclearFlag; @Override public void mousePressed(MouseEvent e) { //マウスが押される度に呼ばれる x1 = x2 = e.getX(); //マウスのX座標を取得 y1 = y2 = e.getY(); //マウスのY座標を取得 } @Override public void mouseDragged(MouseEvent e) { //マウスがドラッグされる度に呼ばれる x1 = x2; y1 = y2; x2 = e.getX(); y2 = e.getY(); } (以下略) インターフェースを使う
MyFrameクラスの各所に、処理を追加します(MyFrame.java)。MyFrameクラスの各所に、処理を追加します(MyFrame.java)。 • フィールド MyListenermyListener; • コンストラクタ内 myListener= new MyListener(); addMouseListener(myListener); addMouseMotionListener(myListener); • paintメソッド内 g.drawLine(myListener.x1, myListener.y1, myListener.x2, myListener.y2); インターフェースを使う
マウスでドラッグすれば絵が描けます。 実行結果
右クリックでキャンバスをクリアするようにするとか、Ctrl+sで画像を保存できるようにするとか、マウスのホイールで線の細さを変えるとかいろいろ改良してみてください右クリックでキャンバスをクリアするようにするとか、Ctrl+sで画像を保存できるようにするとか、マウスのホイールで線の細さを変えるとかいろいろ改良してみてください • 今回使った講義資料、ソースは以下のHPにおいてあるので復習とかに役立ててください • http://rmdy.mydns.jp 最後に