こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

JAVAアプレットのクイズのレイアウト。

JAVAのアプレットを用いてクイズを作成しているのですが、下のソースは5問を連続で表示させるものです。
これを1問ごとに回答した後に「次の問題へ」というボタンだけ画面に切り替わり、そのボタンを押すと次の問題が出てくるようにしたいのですが、どのようにしたら良いでしょうか。
また5問終わったら、「もう一度」というボタンだけの画面に切り替わり、そのボタンを押すと、また1問目から始まるようにしたいのですが、どのようにしたら良いでしょうか。
どちらかだけでもいいので、教えてもらえないでしょうか。

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

public class kake extends Applet implements ActionListener{
private Checkbox CB[];
private CheckboxGroup CBG;
private Button BT;
private Label QL, PL;
private Panel P1, P2;
private String[][] question = {
{"問題1","A","B","C","D","1"},
{"問題2","A","B","C","D","2"},
{"問題3","A","B","C","D","3"},
{"問題4","A","B","C","D","4"},
{"問題5","A","B","C","D","1"},
};

private int rightAns, count;

public void init(){
rightAns = Integer.parseInt(question[0][5]);
count = 0;
CB = new Checkbox[4];
setLayout(new GridLayout(5, 1));
CBG = new CheckboxGroup();
add(QL = new Label(question[0][0]));
add(P1 = new Panel(new GridLayout(1, 2)));
P1.add(CB[0] = new Checkbox(question[0][1], CBG, true));
P1.add(CB[1] = new Checkbox(question[0][2], CBG, false));
add(P2 = new Panel(new GridLayout(1, 2)));
P2.add(CB[2] = new Checkbox(question[0][3], CBG, false));
P2.add(CB[3] = new Checkbox(question[0][4], CBG, false));
add(BT = new Button("答える"));
BT.addActionListener(this);
BT.setActionCommand("BT");
add(PL = new Label(""));
}

public void actionPerformed(ActionEvent ae){
try{
if(ae.getActionCommand().compareTo("BT") == 0){
if(CB[rightAns].getState()){
judgement(true);
}
else{
judgement(false);
}
setQuestion();
}
}
catch(Exception e){
PL.setText(e.toString());
}
}

private void setQuestion(){
QL.setText(question[count][0]);
rightAns = Integer.parseInt(question[count][5]);
CB[0].setLabel(question[count][1]);
CB[1].setLabel(question[count][2]);
CB[2].setLabel(question[count][3]);
CB[3].setLabel(question[count][4]);
repaint();
}
private void judgement(boolean ans){
String result;
if(ans == true){
result = "正解";
}
else{
result = "不正解";
}
if(count == 9){
PL.setText(result);
}
else{
PL.setText(result);
count++;
}
}
}

投稿日時 - 2011-12-07 06:00:39

QNo.7175847

すぐに回答ほしいです

質問者が選んだベストアンサー

add(BT = new Button("…"));
だと、Appletに追加してません?パネルに追加するのではないですか?
パネルを削除してとありますが、
パネルを削除した後に違うパネルを追加するのを忘れてませんか?

あと、いちいちパネルを削除したりするのではなく、
CardLayout
という切り替えられるレイアウトマネージャがありますので、
そちらを使うのも一考かもしれません。

投稿日時 - 2011-12-07 17:06:44

お礼

ご回答ありがとうございます。
またお礼が遅くなってしまいすいません。

パネルに新しいボタンとして追加したいです。
私の考えとして、一度initメソッドで作ったパネルをすべてなくして、新しくパネルを追加する操作を行いたいのですが、前の書いた操作では間違っているのでしょうか。

また質問してしまいすいません。

投稿日時 - 2011-12-11 01:07:25

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

ごめんなさい。追加してました。

投稿日時 - 2011-12-07 17:01:41

お礼

ご回答ありがとうございます。
removeとaddを使っていったら、解決しました。

投稿日時 - 2011-12-11 06:51:51

ANo.2

それはボタンをnewしただけで、
追加していないからでは?

投稿日時 - 2011-12-07 16:56:06

お礼

ご回答ありがとうございます。
removeとaddを使っていったら、解決しました。

投稿日時 - 2011-12-11 06:52:14

ANo.1

>どのようにしたら良いでしょうか。
って言われても
>これを1問ごとに回答した後に「次の問題へ」というボタンだけ画面に切り替わり、そのボタンを押すと次の問題が出てくるようにしたいのですが、
って言うんだから、↑のようにしたらいいと思いますよ。

いきなりどうするかを聞くんじゃなくて、
自分なりにやってから、○○なると思ったけど、××になりました。
△△と□□は試しましたが、◎◎と●●になりました。
って感じで質問しましょう。

やりたいけど、できない、どうすればいい?
じゃいつまでたっても自分の作りたいものが作れませんよ。

投稿日時 - 2011-12-07 14:52:33

お礼

質問の仕方が悪くてすいません。

自分なりに試したのはinitメソッドで指定したパネルをremoveで消し、新しくボタンを設定し、if文でボタンが押されたときに、setQuestionメソッドを呼び出す、というメソッドを作り、そのメソッドを利用して解決しようと思いました。

実際にはこのような感じです。

private void AA(){
remove(PL);
remove(QL);
remove(P1);
remove(P2);
remove(BT);

add(BT = new Button("次の問題へ"));
}

しかし、このメソッドを呼び出しても、「次の問題へ」というボタンが出てきませんでした・・。
どうか教えてもらえないでしょうか。

投稿日時 - 2011-12-07 16:33:42

あなたにオススメの質問