Microsoft Word - 第七週Java講座.docx

Similar documents
Prog2_2nd

Prog2_2nd

android2.indd

ガイダンス

ガイダンス

ガイダンス

Java言語 第1回

HCI プログラミング 10 回目テキストフィールドとキーイベント 今日の講義で学ぶ内容 テキストフィールドの利用 キーイベントの処理 テキストフィールドの利用 1 テキストフィールドを配置してみましょう テキストフィールドを用いることにより 数値や文字列などのデータ入力が可能になります ソースファ

PowerPoint Presentation

ファイルを直接編集する画面を切り替えることができる. 図 3 標準のレイアウトを削除する (2) グラフィカル レイアウト画面で LinearLayout(Vertical) を追加するパレットウィンドウの レイアウト の中にある LinearLayout(Vertical) をドラッグして, 編集

目 次 Java GUI 3 1 概要 クラス構成 ソースコード例 課題...7 i

ガイダンス

ガイダンス

PowerPoint Presentation

GUI プログラミング第 4 Graph ~ 手書認識と関数グラフ描画 ~ マウスで数式を書いて認識し 関数グラフを描画する < 手書認識とグラフ描画のステップ> ステップ 1_1 フレームの作成 ステップ 1_2 マウスで自由に線を書く ステップ 2-1 手書認識認識結果を標準出力する ステップ

Hello, Android

補足資料 インテントによるアプリケーションとアクティビティの呼出し Android アプリのキモとなるインテントとは何? インテント ( 呼び出し要求 ) とは Android 独自の機能です 簡単にいえばアプリケーションや他のアクティビティを呼び出す機能ですが 他のアプリケーションを機能や扱えるデ

Microsoft PowerPoint - prog12.ppt

Prog1_12th

HCI プログラミング 8 回目ボタン チェックボックス ラジオボタン 今日の講義で学ぶ内容 ボタンとアクションイベント ボタンのカスタマイズ チェックボックスとラジオボタン ボタンとアクションイベント 1 ボタンを配置してみましょう ボタンは ラベルと同じようにフォントやその色 画像の貼り付けなど

Prog2_6th

ウィンドウの構成ウィンドウはタイトルバーとウィンドウ枠からなります タイトルバーには最小化 / 最大化ボタンや閉じるボタンがあります また ウィンドウはクライアント領域をもちます クライアント領域にはボタンなど GUI 部品が配置されます GUI 部品配置 ( レイアウト ) ウィンドウ ( ステー

2-2. TableLayout TableLayout は任意のビューを表形式で配置したい場合に利用する (HTML の Table に近いイメー ジ ) 2-3. FrameLayout ビューを重ねて表示するためのレイアウト 後から配置した部品が前面に来る仕様となっている 3. まとめ レイア

次の演習課題(1),(2)のプログラムを完成させよ

Prog2_6th

Prog1_12th

Java言語 第1回

Prog2_11th

Microsoft Word - Android_SQLite講座_画面800×1280

Prog2_6th

Java 2 - Lesson01

アジェンダ 1 グラフィカルなインタフェース GUI(Graphical User Interface) の基礎 2 Swing を利用する Swing の基礎知識 2

Java 2 - Lesson01

awt の主要なクラスを下記に示す クラス Component Container Button Label Panel Frame 説明画面にユーザインターフェイス要素として表示し, ユーザとのやり取りを行うコンポーネントを表すすべてのコンポーネントのスーパークラスになる ほかのコンポーネントを含

Prog2_5th

Java言語 第1回

そして 取得した OutputStream インスタンスを使い 文字コードは UTF-8 として PrintWriter インスタンスを生成して あとは PrintWriter.append() で書き込みたい文字 列を渡して close() で保存する というだけです ファイルの読込み方法 それで

1 Java Java GUI , 2 2 jlabel1 jlabel2 jlabel3 jtextfield1 jtextfield2 jtextfield3 jbutton1 jtextfield1 jtextfield2 jtextfield3

<4D F736F F F696E74202D AC C8899E D834F E >

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Microsoft PowerPoint - OOP.pptx

PowerPoint プレゼンテーション

ボタンイベントアプリイベント処理を含むアプリとして, ボタンをもち, ボタンを押すと文字列を表示するアプリを作る. このアプリは,HelloWorld アプリを改造して作成するため, アプリ作成の途中からの手順を示す. 1. ボタンの設置 (1) レイアウトにボタンを追加するパレットの フォーム ウ

Taro-korattsu.jtd

Microsoft PowerPoint - prog13.ppt

mazec テクニカルガイド第5版(Android版)

Prog2_10th

日 力力 生 行行 入 入 力力 生 用 方

第1章 ビジュアルプログラミング入門

26 editor.putint(pref_count_key, executecount); 27 // 変更した Preference を確定させる 28 editor.commit(); 29 } (c) 実行の様子実装して実行した様子を図 1 と図 2 に示す. 一度実行するごとに, カウン

1: Android 2 Android 2.1 Android 4 Activity Android Service ContentProvider BroadcastReceiver Activity ( ): Android 1 Android Service ( ): ContentProv

Microsoft Word - Android_DI講座_画面800×1280

Microsoft PowerPoint - swing2.ppt

Microsoft PowerPoint - prog13.ppt

PowerPoint プレゼンテーション

text_12.dvi

補足資料 キーイベント処理サンプル package jp.co.keyevent; import android.app.activity; import android.os.bundle; import android.view.keyevent; import android.widget.t

Microsoft PowerPoint - swing3.ppt

ÿþ˜u#u·0¹0Æ0à0

MyEventHandler actionhandler = new MyEventHandler(); m.addeventhandler(actionevent.any, actionhandler); // レイアウト BorderPane を生成 / 設定します BorderPane bp

10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料

プログラミング基礎I(再)

Assignment_.java /////////////////////////////////////////////////////////////////////// // 課題 星の画像がマウスカーソルを追従するコードを作成しなさい 次 ///////////////////

スライド 1

第1章 ビジュアルプログラミング入門

public class Kadai _02 { public static void main(string[] args) { MyFrame frame = new MyFrame("Kadai _02"); (2) フレームのクラス名は MyFrame とし 以下

Microsoft PowerPoint - OOP.pptx

GUIプログラムⅣ

Microsoft PowerPoint - prog03.ppt

非推奨メソッド等の掲載について

B 10 : N ip2003f10.tex B : 9/12/ :02 p.1/71

プロジェクト毎に名前を指定する ( ここでは AndroidTest) 動作可能な最低バージョン メインターゲットのバージョン すべて設定してクリック チェックを外す クリック

Prog2_9th

Prog2_10th

public class MyFrame { private JPanel panel1; private JPanel panel2; private JPanel panel3; private JPanel panel4; private JLabel label1; private JTex

Java言語 第1回

オブジェクト指向言語 Java 博士 ( 情報理工学 ) 小林貴訓博士 ( 工学 ) Htoo Htoo 共著工学博士大澤裕 コロナ社 コロナ社

Prog2_5th

< F2D B838A835882CC8CF68EAE2E6A7464>

第1章 ビジュアルプログラミング入門

Javaの作成の前に

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt


メディプロ1 Javaプログラミング補足資料.ppt

< F2D B825082CC96E291E82E6A7464>

Microsoft Word - Android_DI講座_画面800×1280

< F2D834F838C A815B A CC>

Microsoft PowerPoint - prog11.ppt

Android でサービスしよう! 日本 Android の会 2 月 21 日大阪セミナ- 有山圭二 ( 有限会社シーリス )

Microsoft PowerPoint ppt

Delphi/400でFlash動画の実装

Java - Visual Editor

2 static final int DO NOTHING ON CLOSE static final int HIDE ON CLOSE static final int DISPOSE ON CLOSE static final int EXIT ON CLOSE void setvisible

< F2D E E6A7464>

Microsoft PowerPoint - prog11.ppt

Assignment9_1.java

11 ソフトウェア工学 Software Engineering デザインパターン DESIGN PATTERNS デザインパターンとは? デザインパターン 過去のソフトウェア設計者が生み出したオブジェクト指向設計に関して, ノウハウを蓄積し 名前をつけ 再利用しやすいようにカタログ化したもの 各デ

第1章 ビジュアルプログラミング入門

Transcription:

第七週 Java 講座 今日は 難しい話はなしで プログラミングがしたくなるようなことをまとめた 目次第七週 Java 講座... 1 API(Application Program Interface) とは... 1 Swing... 2 Swing 1. フレームを作成する... 2 Swing 2. フレームにコンポーネントを追加する... 3 Swing 3. コンポーネントにイベントを追加する... 5 JavaFx... 7 OpenGl... 9 AndroidAPI... 10 その他 API... 13 TwitterApi... 13 FaceBookApi... 13 GoogleApi... 13 API が存在しないアノ Web サービスを使いたい時... 13 Web スクレイピング... 13 イベント駆動型プログラミング... 13 競技プログラミング... 14 API(Application Program Interface) とはソフトウェア同士をつなぐインターフェース プログラミングをする際に API を使用することで誰かが作ったデータ構造や特殊な操作を自分のプログラム上で呼び出せる 例えば グラフィック処理を行う OpenglAPI を使うことで手軽に CG を描画させることができる (Minecraft はこの Opengl を使って作られている )

Swing Java で GUI アプリケーションを作る際に使われる API フレーム( ウィンドウ ) の中にコンポーネント ( ボタンやラベル ) を追加していき アプリケーションを作成する Swing では それぞれのコンポーネントにイベントを設定することでアプリを作成していく 簡単に Swing アプリケーションの作成方法をまとめると以下のようになる 1. フレームを作成する 2. フレームにコンポーネントを追加する 3. コンポーネントにイベント追加する 実際に Swing アプリケーションを作っていく 上記の流れに沿って作成していく Swing 1. フレームを作成する package week7; import javax.swing.jframe; public class Week7{ public static void main(string[] args){ // フレームを作成する JFrame jframe = new JFrame("Swing App"); // 表示サイズを決定する jframe.setsize(300, 200); // フレームを表示する jframe.setvisible(true); フレームを作成する過程では JFrame クラスをインスタンス化させる コンストラクタに文字列を渡すと ウィンドウのタイトルを決めることができる サイズの指定もしておくと実行した時に見やすくなる JFrame は生成しただけでは ウィンドウとして現れないので setvisible メソッドを使い表示させる必要がある

Swing 2. フレームにコンポーネントを追加する package week7; import java.awt.borderlayout; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jtextfield; public class Week7{ public static void main(string[] args){ JFrame jframe = new JFrame("Swing App"); jframe.setsize(300, 200); // コンポーネントを生成 JLabel label = new JLabel("Hello Swing"); JButton btn = new JButton("Button"); JTextField field = new JTextField("field"); // フレームにコンポーネントを追加する jframe.add(label,borderlayout.north); jframe.add(btn,borderlayout.center); jframe.add(field, BorderLayout.SOUTH); jframe.setvisible(true); 今回使用したコンポーネントは JLabel,JButton,JTextField である JLabel は 文字を表示するコンポーネントでキーボードを使って書き込むことができない JButton はマウスでクリックできるボタンを提供する JTextField はキーボードで書き込むことのできる領域を作成する フレームにコンポーネントを追加する際には 配置を指定することで好きな場所にコンポーネントを表示させられる 現在は BorderLayout を使って相対的にコンポーネントを配置しているが 座標で指定することも可能である 次に イベントを追加する

ここで 一度ソースをリファクタリングする public class Week7{ JLabel label; JButton btn; JTextField field; JFrame jframe; public static void main(string[] args){ new Week7(); public Week7(){ jframe = new JFrame("Swing App"); jframe.setsize(300, 200); label = new JLabel("Hello Swing"); btn = new JButton("Button"); field = new JTextField("field"); jframe.add(label,borderlayout.north); jframe.add(btn,borderlayout.center); jframe.add(field, BorderLayout.SOUTH); jframe.setvisible(true);

Swing 3. コンポーネントにイベントを追加する 今回は JTextField に書き込まれた内容を JButton の押下に対応して JLabel に書き込む イベントを追加する package week7; import java.awt.borderlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.jtextfield; public class Week7{ JLabel label; JButton btn; JTextField field; JFrame jframe; public static void main(string[] args){ new Week7(); public Week7(){ jframe = new JFrame("Swing App"); jframe.setsize(300, 200); label = new JLabel("Hello Swing"); btn = new JButton("Button"); field = new JTextField("field"); //JButtonがクリックされた時のイベントを追加する btn.addactionlistener(new ButtonClickListener()); 次のページに続く

jframe.add(label,borderlayout.north); jframe.add(btn,borderlayout.center); jframe.add(field, BorderLayout.SOUTH); jframe.setvisible(true); // イベントを追加するには ActionListenerを継承して // 押下時にする処理を書きたい場合は //actionperformedメソッドをオーバーライドする public class ButtonClickListener implements ActionListener{ public void actionperformed(actionevent event){ String tmp = field.gettext(); label.settext(tmp); コンポーネント内の addactionlistener メソッドにイベント処理を記述したクラスのコンストラクタを渡すことでコンポーネントにイベントを追加することができる イベントを作る際には ActionListener クラスを継承して actionperformed メソッドをオーバライドして その中にコンポーネントをクリックした時に行って欲しい処理を記述する コンポーネントには settext(),gettext() メソッドがあり コンポーネントに書かれた文字列を変更したり 文字列を受け取ったりできる リスナ (Listener) とは 指定されたアクション (ActionListener の場合はコンポーネントのクリック ) が起きた時に予め決められた処理を実行するオブジェクト ウィンドウに対して作用する WindowListener マウスに対して作用する MouseListener などが存在している

JavaFx Java7 までは Swing が java 標準の GUI として使われていた しかし 最新バージョン Java8 では代わりに JavaFx が標準 GUI に選ばれた C 棟演習室の PC には Java8 が導入されていないので スクリーンで実演だけを行う 先ほどの Swing で作成したアプリと同じ操作をするコードを書いてみる package fxapp; import javafx.application.application; import javafx.scene.scene; import javafx.scene.control.button; import javafx.scene.control.label; import javafx.scene.control.textfield; import javafx.scene.layout.borderpane; import javafx.stage.stage; public class Fxapp extends Application{ Label label; TextField field; Button button; public static void main(string[] args) { launch(args); 次のページに続く

public void start(stage stage) throws Exception { label = new Label("This is JavaFX!"); field = new TextField(); button = new Button("Click"); BorderPane pane = new BorderPane(); pane.settop(label); pane.setcenter(field); pane.setbottom(button); button.setonaction((event)->{label.settext(field.gettext());); Scene scene = new Scene(pane, 320, 120); stage.setscene(scene); stage.show(); JavaFx では start メソッドに処理をオーバライドする メソッド名やクラス名が違うが 基本的には Swing と大差ないソースの書き方をしている ただ イベント処理部分では クラスを作成せずに イベント発生時に行って欲しい処理をラムダ式で記述し setonaction メソッドに渡す ラムダ式は Java8 で新しく追加された JavaFx では xml で画面の配置を指定することもできる

OpenGl OpenGl を使用すると 3DCG を描画させることができる 二年後期の PBL で使用するので やっておくといいカモ プログラムソースは ほぼトレスなので 割愛 swing のリスナと合わせて キーボード処理やマウス処理を行うことができる

AndroidAPI AndroidOS で動くアプリを作る際に使用する API OS のバージョン毎に API が用意されている 基本的には IDE と平行して利用する 主な IDE としては AndroidStudio,Eclipse などがある AndroidStudio の方が特化しているので オススメ Android のアプリを作る際には Java と簡単な xml を理解する必要がある 基本的な作成方法は xml でウィジェット ( ボタン テキストフィールド等 ) を配置して画面を構成して Java でイベントを追加する 基本的には swing や javafx と変わらない Swing で作ったものと同じアプリを作ってみた MainActivity.Java package com.example.kaimaitakumi.testapp; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.textview; public class MainActivity extends AppCompatActivity { // ウィジェット Button button; TextView textview; EditText edittext; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); //xml で定義した画面と連結させる button = (Button)findViewById(R.id.button); textview = (TextView)findViewById(R.id.textView); edittext = (EditText)findViewById(R.id.editText); // リスナを設定 button.setonclicklistener(new ButtonClickListener()); 次のページに続く

// リスナ class ButtonClickListener implements View.OnClickListener { public void onclick(view V){ textview.settext(edittext.gettext()); Activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context="com.example.kaimaitakumi.testapp.mainactivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hello World!" android:id="@+id/textview" android:textsize="20pt" android:layout_alignparentend="true" android:layout_alignparentstart="true" /> 次のページに続く

<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button" android:id="@+id/button" android:layout_below="@+id/textview" android:layout_alignparentstart="true" android:layout_margintop="32dp" android:textsize="20pt" android:layout_alignend="@+id/textview" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/edittext" android:text="text" android:layout_below="@+id/button" android:layout_alignparentstart="true" android:layout_margintop="46dp" android:textsize="20pt" android:layout_alignend="@+id/button" /> </RelativeLayout> Androidstudio では xml をグラフィカルに配置することもできる

その他 API TwitterApi ツイッターには公式以外にも Twitter クライアントと呼ばれる外部の開発者が作成したアプリがある そのアプリは ツイッター機能や フォロー機能などを簡単に実装できる TwitterApi で作られているのがほとんどだ 自分だけの Twitter クライアントを作るのもいいかもしれない FaceBookApi TwitterApi と同じ感じ GoogleApi Gmail,GoogleCalendar,GoogleMap などのサービスにアクセスできる API 有料 API が存在しないアノ Web サービスを使いたい時例えば エキサイト翻訳のサービスを自分のアプリケーションに合わせたいとする しかし エキサイト翻訳には Api が存在していない 実際に Api が存在している Web サービスの方が稀だが そんな時には スクレイピングという方法がある Web スクレイピングホームページから自分のほしい情報を抽出する方法 一般的なホームページはアクセスすると html ファイルが渡され ブラウザを通すことでホームページとして見れる ならば 受け取った html ファイルからほしい情報だけ抽出してうまく表示すれば Api のようなことができるのではないだろうかという話だ Java の場合は 指定した Url と http 通信を行い html ファイルを受け取り それを読み込み 文字列として様々な処理 ( 主には html のタグを消したり body 部分以外を切り取ったりする ) をすることでスクレイピングができる イベント駆動型プログラミング Swing,Javafx,Android ではアプリケーションを作る方法が似通っていた 何故かと言うと 全てイベント駆動型プログラミングに沿っているからだ イベント駆動型プログラミングでは イベントが起きる度に処理をする

競技プログラミング ソフトウェア開発も楽しいが 他にも競技プログラミングも結構楽しい 実際に 講座で一回やってみたいと思う 問題 2016 年 7 月 22 日 話題ゲームポケモン Go が配信された ポケモン Go は GPS の情報を元に 公園や公共施設に設置されたポケストップと呼ばれるところに行き モンスターボールを手に入れ そのモンスターボールを使って歩いていると遭遇するポケモンと呼ばれる生物を捕まえるゲームである 早速ダウンロードしたアイ沼君は ハマりすぎて単位を落とすことを恐れて 一日 10 分しか歩かないことを決めた ( 帰り時間は含まない ) 自分家の周辺には 2 つのポケストップがある アイ沼君は 10 分でポケストップを何個通過できるかを計算しようとしている アイ沼君は 2 つのポケストップからそれぞれに向かう時にかかる時間を調べた では 2 つのポケストップのそれぞれの時間から どうポケストップを巡回すれば より多くのポケストップを回れるかをプログラムで求めよう ( できれば 早く巡回を終わりたい ) 以下の表にまとめた 今いる所 向かう所 A に行く B に行く家から 5 4 A から 0 6 B から 5 0 また アイ沼くんの住んでる地域は 坂が多いので A B と B A が同じ時間とは限らない Input1 5 4 0 6 5 0 OutPut1 B A Input2 2 3 0 0 1 0 OutPut2 A B