// キー入力がbuttonに横取りされないようにするため deleteButton.addKeyListener(myCanvas); clearButton.addKeyListener(myCanvas);とあるように,ボタンのKeyListenerを明示的にキーボードを受け取って欲しいクラスを指定する と直ります.
Kadai1202クラスから Mycanvasクラスの paintメソッドへ Textfield内の文字 列をどうやって渡したらいいかがわかりません。教えてください。
TAの小田原です。 TextField tf = new TextField(5); とした時に、tf.getText(); というメソッ ドによってtf上の文字列を得ることができます。イベントが生じたときに、 getText()を実行し、そこで得た文字列をpaint内で用いればよいでしょう。 Kadai1202クラスの変数を用いる場合には、その変数をクラス変数として、他 のクラスから参照できるようにしたうえで、その参照をMyCanvasクラスに渡さ なければなりません。下では、MyFrameクラスのオブジェクトをMyCanvasクラ スのコンストラクタに渡し、MyCanvasクラスのクラス変数に代入した上で、 paintからその変数を参照しています。 もっといい方法がありそうです。いろいろ考えてみて下さい。GUIにおけるク ラス設計については、人に聞くだけでは限界があると思うので、正直なところ、 参考書を購入して独学することをお勧めします。わからないときはわかるとこ ろまで戻って、時間をかけて復習しましょう。 import java.awt.*; import java.awt.event.*; public class MyFrame extends Frame{ public TextField tf = new TextField(5); public MyFrame(String s){ super(s); } public static void main(String[] args){ MyFrame mf = new MyFrame("myframe"); MyCanvas mc = new MyCanvas(mf); mf.tf.addActionListener(mc); mf.setLayout(new BorderLayout()); mf.add(mf.tf, BorderLayout.SOUTH); mf.add(mc, BorderLayout.CENTER); mf.setSize(200, 200); mf.setVisible(true); } } class MyCanvas extends Canvas implements ActionListener{ MyFrame mf; String str=""; MyCanvas(MyFrame mf){ this.mf = mf; } public void paint(Graphics g){ g.drawString(str, 10, 10); } public void actionPerformed(ActionEvent e){ str = mf.tf.getText(); repaint(); } }
画像をファイルからロードしたいのですがアプレットのため今までのようなや り方ではできなくなってしまいました。でも、initの内部に画像を読み出す部 分があるわけではないので授業でやった通りにもできません。どうしたらよい でしょうか?
計プロTAの矢野です。 アプレットで画像をロードする際には、 Appletクラスが持つメソッドgetImageが利用できます。 田中先生の授業ページ http://lecture.ecc.u-tokyo.ac.jp/~ktanaka/programming03/1209-1.html の一番下、注意事項の4番目に記述があります。 そこを引用させていただきますと、 > イメージの読み込みの際には,ファイルからのイメージのロードと描画で使った > 「Toolkit.getDefaultToolkit().getImage(ファイル名)」というテクニックが > 使えない.代わりに,AppletクラスのgetImageメソッドを使う. > > initの中で, > > frame=new DrawImage(); > frame.image=getImage(getCodeBase(),"test.gif"); > > のように使う. ということです。 メソッドの詳細については、APIを参照してください。 http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/applet/Applet.html
Kadai1209について聞きたいです Kadai1209ディレクトリのしたにkadai1111.pngがあるが class Draw extends Canvas ....{ public Draw(){ .... image=Toolkit.getDefaultToolkit().getImage("kadai1111.png"); } public void paint(...){ g.drawImage(image,0,0,this); } } public class Kadai1209 extends Applet...{ } しかしindex.htmlで見ると、kadai1111.pngのimageを読み込めない。 ("security exceptionpermision kadai1111")と現れる。そのため chmod 755 kadai1111を実行したができなかった。 また、init() のなか、getImage(getCodeBase(),"kadai1111.png"))を使った。だが、読み込めない。だから、init()の中、drawImage(image,0,0,this)使ったつもりですが、エラが発生した どうすればいいか、教えてください。 また 、Appletのサブクラス にsetmenubarを使いたいから class Kadai1209 extends Applet,Frame..{}のようにしたいが、できなかった。教えてください ありがとうございます。
田中哲朗です. アプレット中ではセキュリティ上の制限により,上の手法は使えません, http://lecture.ecc.u-tokyo.ac.jp/~ktanaka/programming03/1209-1.html でも説明して います. > また、init() のなか、getImage(getCodeBase(),"kadai1111.png"))を使った。だが、読み込めない。 こちらの方法で正しいはずですが,「読み込めない」というのは具体的にどのようなエラーなのでしょうか? > だから、init()の中、drawImage(image,0,0,this)使ったつもりですが、エラが発生した > どうすればいいか、教えてください。 initの中では,描画をおこなうことができません. > また 、Appletのサブクラス にsetmenubarを使いたいから > class Kadai1209 extends Applet,Frame..{}のようにしたいが、できなかった。教えてください アプレット本体にはメニューバーをつけることができないので,12/9の課題では $B!V$J$k$Y$/F1$8F0:n$r$9$k!J%a%K%e!<%P!<$J$I$O:F8=$7$J$/$FNI$$!K!W$H>r7o$r つけています.ただし, http://lecture.ecc.u-tokyo.ac.jp/~ktanaka/programming03/1209-2.html のように, WWWブラウザ以外のウィンドウを開くアプレットを作ると,そのウィンドウに メニューバーをつけることは可能です.
Appletviewerで見たときはGUI部品はちゃんと動くのですが、提出用のHTMLファイルにするとどういうわけかGUI部品がまったく反応しなくなります。 どうしたらよいでしょうか?
TAの小田原です。 どういうことなんでしょうね…。とりあえず、うちの環境(Linux,mozilla)で コンパイルしてブラウザで見てみたところ、問題なく動いているように見えま す。 マウスをクリックしたところに月が現れ、複数回クリックしたあとでその動き をundo, redoできるというものですよね。また、clearを押すと月の位置が初 期状態に戻るんですね。 そういうわけで、とりあえず提出してみてはどうでしょうか。あと、ECCで動 かしているときは他のアプリケーションを落としてからブラウザだけ立ち上げ て再トライしてみるというのはやってみる価値はあると思います。
その上で, 最終回の1月27日(火)に,教卓上のNCを使って,発表(デモンストレーションと プログラムの説明)をしてもらい(提出人数によっては全員ではなくこちらの指 定した人だけになると思います),それで評価します.
/home/ktanaka/bin/report1216 1のように実行する。このコマンドは1月25日21時までに実行すること。それまで は何度実行してもかまわない.