画像を表示するアプレットです。
ボタンをクリックすると、二つの画像を交互に変換して、表示するプログラムを作りたいのですが、よく出来ません。
どうすれば、画像を変換できますか?また、「この部分はこうした方がいい」という部分があれば教えてください。
どうか、よろしくお願いします。
(スペースが表示されない・・・(^^ゞ)


***********************************************ImageDemo.java*********
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

//<applet code=ImageDemo.class width=470 height=623></applet>

public class ImageDemo extends Applet{
View view;
Image image,image2;
Panel panel_left,panel_right;
Button buttonChange;
boolean flag;

public void init(){
flag = true;
image = getImage(getDocumentBase(),"nagasaku.jpg");
image2 = getImage(getDocumentBase(),"kawamura.jpg");

view = new View(image);

buttonChange = new Button("Button Change");
buttonChange.addActionListener(new myActionListener());

add(view);
add(buttonChange);
}
class myActionListener implements ActionListener{
public void actionPerformed(ActionEvent ae){
Object obj = ae.getSource();
if(obj == buttonChange){
if(flag){
view = new View(image2);
flag = false;
}
if(!flag){
view = new View(image);
flag = true;
}
}
}
}
}
////////////////////////////////////////////////
class View extends Canvas{
Image image;
View(Image image){
this.image = image;
setSize(358,623);
}

public void paint(Graphics g){
g.drawImage(image,0,0,358,623,this);
}
}

このQ&Aに関連する最新のQ&A

A 回答 (1件)

とりあえず、軽ーく見た感じだけですが、



ボタン押下時に新しいViewオブジェクトのインスタンスを生成していますけど、そのインスタンスをアプレットのコンテナに追加してない気がしますが。
そのまえに現在のViewオブジェクトをコンテナから削除しないといけないですね。

Canvasを拡張したクラスを作ってインスタンスたくさん作るより、裏画面として画像2つ描画済みのCanvasを保持してそこからAppletにあるCanvasに書き直した方が楽な気がします。

あと、Panelの変数二つ使っていない気がするのは気のせいですかね(^^;
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QA a = new A(){}; の構文の意味が分からない。

下記サイトのコードを読んでいて、

ResponseListener listener = new ResponseListener() {
//略
};

という書き方があったのですが、どういう意味になるのでしょうか?
インスタンスの作り方は単に

A a = new A();

だと思うのですが…。

http://www.snmp4j.org/doc/org/snmp4j/Snmp.html

Aベストアンサー

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけてもいいわけ。
そんな場合、わざわざクラスを1つ作る必要なくて
その場でちょちょいとやってしまうことができるのよ。
それが無名クラスっていう実装方法よ。

http://www.javaroad.jp/java_class15.htm

FileFilterやCompare、Runnableなんかで
他のクラスで再利用しないときは良くやるわ。

無名クラスと呼ばれるものよ。
私も良くやるわ。

ちなみに
A a = new A();
はできないわよ。
Aはインターフェースだからね。


上記の場合、正式に実装するなら、
ResponseListenerをimplementsした
MyResponseListener(仮名)を別途作成し、
それを
ResponseListener listener = new MyResponseListener();
とする必要があるわ。
でも、このMyResponseListenerは
今ここでしか使わない、他からまったく参照する必要のない
超ローカルなクラスなのよ。
このメソッドが終了すればGCにかけても...続きを読む

QAppletのpublic void paint(Graphics g)

は抽象クラスのGraphicsのオブジェクトを引数に持ちますが抽象クラスはオブジェクトを発生できないのに何故オブジェクトを渡せるのでしょうか?

Aベストアンサー

実際にパラメータとして渡されるのは、Graphicsのサブクラスのインスタンスだからです。

Graphics クラスは抽象クラスですが、そのサブクラスは抽象クラスとは限りません。

QJavaScriptで【window.google={kHL:"ja"};】という記述はどういう意味?

JavaScriptで【window.google={kHL:"ja"};】という記述はどういう意味?


YOUTUBE日本語版
http://jp.youtube.com/
のHTMLソースを見ていたら、



<script type="text/javascript">
    window.google={kHL:"ja"};
</script>


という記述を目にしたのですがこれはどういう意味あいというか目的のものなのでしょうか?


教えていただければ幸いです。

Aベストアンサー

これは、window.googleに'kHL'というキー(値は'ja')を持つ連想配列を
作成しています。

JavaScriptでの連想配列は

var 変数名 = {
キー : '値',
キー : '値',
:,
キー : '値'
};

というような感じで作成します。
キーはダブルクォートまたはシングルクォートで囲まなくても
いいようです。

参考URL:http://javascriptist.net/docs/basic_hash.html,http://www.openspc2.org/JavaScript/kouza2007/array/hash/index.html

Qpublic class Power {

public class Power {
static long pow(int a, int b){
if (b<=0)
return 1;
else
return a*pow(a,b-1);
}
public static void main(String args[]){
System.out.println(pow(1,3));
}
}

run:
1
BUILD SUCCESSFUL (total time: 0 seconds)

簡単な問題ですが。。。
僕の予想では答えは2でした

1 * (1, 2)
1 * 1 * 2
じゃないんですか?

Aベストアンサー

いえ、

pow(1,3)
= 1 * pow(1,2)
= 1 * 1 * pow(1,1)
= 1 * 1 * 1 * pow(1,0)
= 1 * 1 * 1 * 1 = 1です。

#ちなみに…例えば
pow(3,2)
= 3 * pow(3,1)
= 3 * 3 * pow(3,0)
= 3 * 3 * 1
= 9
となります(上記が1の4乗として計算されているんじゃなくて(1の3乗) * 1だという印象をつけたかったので例を出した)

Qclass Test_A {  main(){}}の実行順序は?

public class Test_A {
public static void main(){

int a = 0;
int b = 1;

}
}
例えば上のようなサンプルで何故 main()がクラスTest_A の中に挟まっているのでしょうか?実行順序としては main()が終了したら、クラスTest_A の方はどうなるのでしょうか? main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。よろしくお願いします。 

Aベストアンサー

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時には、Test_Aクラスのインスタンスは生成されません。
質問のコードでは変数a,bに値が代入され、それで終わりです。

Javaでは、(正確にはJavaVMは)実行するclassファイルにある、
String[]引数を持ったvoid mainメソッドを実行する仕様になっています。
しかし、mainメソッドを実行するときには何のインスタンスも生成されていないので、
何かのインスタンスのメソッドを実行することはできません。
なので、staticなメソッドでないとJavaVMが実行できないのです。
さらに、JavaVMからアクセス可能なスコープを与える必要があるので、
publicである必要もあるのです。

あとは、そのmainメソッドに指定されたコードを実行し、mainメソッドの最後まで処理が進んだら
そこでJavaVMが終了し、プログラムも終了します。

※細かい話ですが、main()からプログラムは始まりません。
正確に言うと、引数なしのmain()メソッドは他のメソッドと何ら代わりがありません。
プログラムを始めるには、
アクセススコープがpublicで、staticな戻り値のなく、引数にString配列を取るmainメソッド
であることが必要です。つまり、
public static void main(String[] args)
とするのが通常です。
試しに質問のコードをjavaコマンドで実行すると、NoClassDefFoundErrorが出るはずです。

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時...続きを読む


人気Q&Aランキング

おすすめ情報