// キー入力が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時までに実行すること。それまで は何度実行してもかまわない.