[[Lecture]] #author("2022-01-13T19:14:49+09:00","","") * マルチメディアプログラミング2006年後期 [#l4c2f469] **javaのマニュアル [#d164e030] http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/index.html **課題:お絵描きプログラムを作成してさらに取扱説明書を作成して提出すること [#b4ce4d74] この課題のヒントは SimpleDraw をみてください。 *** 提出課題として最低やってほしいこと [#a3a21b68] -ペンの太さをメニューで変えられるようにしてください -ペンの色をメニューで変えられるようにしてください -消しゴム機能を追加してください *** 以下のことができれば加点します [#dfd42e59] -ウィンドウの大きさを変えても絵が消えてしまわないようにする (ダブルバッファを使う) -絵や写真のファイルを取り込めるようにする -いろいろな効果のペンを作る(たとえばペンの動きに従って文字が出る) -絵をファイルへ書き出す機能を作る -そのほか、世の中のお絵描きプログラムにありそうな機能を実現する 詳細はSimpleDrawを見てください *** 取扱説明書の作り方 [#x39cba26] -ApplicationsからMicrosoft Office 2004/Microsoft Wordもしくは、Text Editを選択して、これを使って、今回作成したプログラムの取扱説明書を書いてください。 -せっかくですので作った機能はぜんぶここで説明してください。(プログラムは私も試してみますが機能を見逃すかもしれません) -スクリーンキャプチャした図も入れてください。図は次のようにして作ります --スクリーンキャプチャしたいところで、コマンド(リンゴマーク)+シフト+3を押します。 --デスクトップにピクチャxx.pdfというファイルができます --これをダブルクリックで開きます --欲しい部分を矩形ツールで選択してコピーします --WordかText Editにペーストします *** 出来上がったプログラムの提出方法 [#y885ab8a] - フォルダを作ってその中にjavaファイルとclassファイルと、取扱説明書ファイルと、それ以外に必要なファイルがもしあればそれらを入れてください。フォルダの中のclassファイルをダブルクリックしたらプログラムが起動することを確認してください。 -このフォルダに名前を付けてください。フォルダの名前は、「氏名(ローマ字フルネーム)+適当な文字か数字」にしてください。 -このフォルダを以下の手順でサーバにおいてください +Finderの移動メニューから、「サーバへ接続...」を選んでください +サーバアドレスのところにsiio.jpと書いてください +接続ボタンを押してください +ゲストのラジオボタンを選んで、接続ボタンを押してください +Publicを選択してください +画面にjava_reportというフォルダが見えると思います +このフォルダに、上で用意したフォルダをドラッグアンドドロップしてください -レポート提出用フォルダは書き込み専用で見ることができません。アップロードできたかどうか不安でしたら教員まで質問してください。 -同じ名前のフォルダを投げ込むと、エラーになります。ということで新しいバージョンができたら別の名前のフォルダを作って提出し直してください。(フォルダ名「氏名(ローマ字フルネーム)+適当な文字か数字」の後半を数字だったら増やして、アルファベットだったら辞書順の後の文字にください。) ** 1月10日の課題 [#g6307ba2] -ドラッグして書き始めるときの不要な直線を消してください -マウスポインタの位置と書いている場所がずれているのを直してください ** 1月10日の線を引く簡単なプログラム [#k87f9626] import javax.swing.JPanel; import java.awt.Graphics; /** * */ /** * @author siio * */ public class DrawPanel extends JPanel { public void drawLine(int x1, int y1, int x2, int y2){ Graphics g = this.getGraphics(); g.drawLine(x1, y1, x2, y2); } } import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JFrame; /** * */ /** * @author siio * */ public class SimpleDraw extends JFrame implements ActionListener, MouseListener, MouseMotionListener { int lastx, lasty, newx, newy; DrawPanel panel; /* (non-Javadoc) * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent) */ public void mouseClicked(MouseEvent arg0) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent) */ public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent) */ public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent) */ public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub lastx=arg0.getX(); lasty=arg0.getY(); } /* (non-Javadoc) * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent) */ public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see java.awt.event.MouseMotionListener#mouseDragged(java.awt.event.MouseEvent) */ public void mouseDragged(MouseEvent arg0) { // TODO Auto-generated method stub newx=arg0.getX(); newy=arg0.getY(); panel.drawLine(lastx,lasty,newx,newy); lastx=newx; lasty=newy; } public void mouseMoved(MouseEvent arg0) { // TODO Auto-generated method stub } private void init() { this.setTitle("Simple Draw"); this.setSize(300, 200); this.addMouseListener(this); this.addMouseMotionListener(this); panel=new DrawPanel(); this.getContentPane().add(panel); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SimpleDraw frame=new SimpleDraw(); frame.init(); } } **12月21日のマウスイベントのサンプル [#ad0719f2] import java.awt.*; import javax.swing.*; import java.awt.event.*; public class SimpleDraw extends JFrame implements MouseListener, MouseMotionListener{ SimpleDraw(String title) { setTitle(title); addMouseListener(this); addMouseMotionListener(this); } public void mouseClicked(MouseEvent e) { System.out.println("mouse clicked!"); } public void mouseEntered(MouseEvent e) { System.out.println("mouse entered!"); } public void mouseExited(MouseEvent e) { System.out.println("mouse exited!"); } public void mousePressed(MouseEvent e) { System.out.println("mouse pressed!"); } public void mouseReleased(MouseEvent e) { System.out.println("mouse released!"); } public void mouseDragged(MouseEvent e) { System.out.println("mouse dragged!"); } public void mouseMoved(MouseEvent e) { System.out.println("mouse moved!"); } public static void main(String[] args) { SimpleDraw sample = new SimpleDraw("Drawing application"); sample.setSize(400,300); sample.setVisible(true); sample.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } **12月14日にやった演習13.2の回答例 [#rfff79cf] import java.awt.*; import javax.swing.*; import java.awt.event.*; public class JTextFieldSample extends JFrame implements ActionListener { JButton button, clearButton; JTextField textleft, textright; JTextFieldSample(String title) { setTitle(title); button = new JButton("left to right"); clearButton = new JButton("clear"); button.addActionListener(this); clearButton.addActionListener(this); textleft = new JTextField(10); textright = new JTextField(10); JPanel panel=new JPanel(); panel.setLayout(new GridLayout(2,2)); panel.add(textleft); panel.add(textright); panel.add(button); panel.add(clearButton); Container container=this.getContentPane(); container.add(panel); } public void actionPerformed(ActionEvent e) { if(e.getSource()==(button)) { textright.setText(textleft.getText()); textleft.setText(""); }else if(e.getSource()==(clearButton)) { textright.setText(""); } } public static void main(String[] args) { JTextFieldSample sample = new JTextFieldSample("JTextFieldSample"); sample.pack(); sample.setVisible(true); sample.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } **11月30日に説明したURL読み込みの例 [#md3f2573] import java.io.*; import java.net.*; public class URLTest { public static void main (String argv[]) { try { URL targetURL = new URL("http://www.ocha.ac.jp/"); InputStream istream = targetURL.openStream(); BufferedReader breader = new BufferedReader (new InputStreamReader(istream, "JISAutoDetect")); String line; while((line=breader.readLine()) != null) System.out.println(line); }catch(IOException e) { System.out.println("error..."); } } } **11月2日の宿題 [#va36c057] Class Osaifuを作り、以下のクラスメソッドが java Osaifuコマンドで動くようにせよ。 public static void main(String argv[]) { Osaifu saifu1 = new Osaifu(1000);//インスタンスを作る //最初の保持金額を1000円にする Osaifu saifu2 = new Osaifu(500);//インスタンスを作る //最初の保持金額を500円にする saifu2.in(saifu1.out(200));//saifu1からsaifu2に200円移す saifu1.print();//現在の金額を表示 saifu2.print();//現在の金額を表示 } **11月2日の解答例 [#u8a07224] public class Point3D { private int x, y, z; void putx( int ptx) { x=ptx; } void puty(int pty) { y=pty; } void putz(int ptz) { z=ptz; } int getx() { return x; } int gety() { return y; } int getz() { return z; } Point3D(int ptx, int pty, int ptz) { //x=ptx; y=pty; z=ptz; this.putx(ptx); this.puty(pty); this.putz(ptz); } //指定された点との距離を求めるインスタンスメソッド double distance(int ptx, int pty, int ptz) { double d; int dx = ptx - x; int dy = pty - y; int dz = ptz - z; d = Math.sqrt(dx * dx + dy * dy + dz * dz); return d; } //指定された点との距離を求めるインスタンスメソッド double distance(Point3D pt) { return this.distance(pt.getx(), pt.gety(), pt.getz()); } //Point3Dクラスに以下のクラスメソッドを追加して、 //これがjava Point3Dコマンドで動くようにせよ。 public static void main(String argv[]) { Point3D pt1 = new Point3D(1,2,3); Point3D pt2 = new Point3D(30,20,10); System.out.println(pt1.distance(pt2)); //pt1,pt2の距離を表示 } } * ヒューマンインタフェース 2006年前期 [#y55f9e6e] ** 授業で使っているプレゼン資料 [#mfe7a187] + 人とモノとのインタフェース http://is.ocha.ac.jp/~gradthesis/lecture/humaninterface/everydaythings.pdf + グラフィカルユーザインタフェース(GUI) http://is.ocha.ac.jp/~gradthesis/lecture/humaninterface/gui.pdf **レポート課題 [#qd451727] -提出期限:2006年9月22日(金曜日) -提出先:情報科学科図書室カウンター(501号室) -提出方法:A4用紙のレポート。 -課題 (1-1) 以下の日用品を1つ以上例示せよ -使いやすい/使いにくい道具 -利用者によって貼紙された道具 (1-2) なぜ(1-1)のような事態になったのかを、分析せよ 制約、マッピング、Affordance、モデル、複雑性、エラー対策、状態がビジュアルかどうか、標準化の問題か、などを議論せよ。 (2) グラフィカルユーザインタフェース(GUI)をキャラクターベースのインタフェース(CUI)と比較して,以下のことを述べよ. (2-1)CUIに対するGUIの長所を,「初心者、子供、直接操作、アフォーダンス、デスクトップメタファ、WYSIWYG」などの言葉を使って説明せよ. (2-2)CUIに対するGUIの短所を,「熟達者、キーボードと指示装置の併用、計算機資源、パイプ、正規表現、コマンドスクリプト言語」などの言葉を使って説明せよ. ------ このページについてのお問い合わせはsiio@is.ocha.ac.jpまで。