java初心者です。
やりたいことは、
i_step変数によって、表示する、画像や、パネル(ボタンが作成されています)を替えたいのです。
今はB_Nextボタンによってi_step変数が加算されます。
i_step=1になると、画像が表示されるのですが、
一緒に表示されてほしい【ボタン1】が表示されません。
ですが、マウスアップすると、表示されるようになります。
はじめは【NEXT】ボタンも表示されなかったのですが、
過去の質問を検索し、
http://oshiete1.goo.ne.jp/qa2530138.html
を参照して、super.paint(g);を追加したら、
【NEXT】ボタンは表示されるようになりました。
ソースは以下です。
package guidance_ap;
import java.awt.*;
import javax.swing.*;
public class Test extends JApplet {
Image img1, img2;
private JButton B_Next = null;
private JPanel jContentPane = null;
private JPanel jPanel1 = null;
private JButton b1 = null;
int i_step = 0;
public Test() {
super();
}
public void init() {
this.setSize(640, 480);
this.setContentPane(getJContentPane());
img1 = getImage(getCodeBase(), "test.gif");
img2 = getImage(getCodeBase(), "test2.gif");
}
public void paint(Graphics g) {
super.paint(g);
jContentPane.removeAll();
jContentPane.add(getB_Next(), null);
switch (i_step) {
case 0:
g.drawImage(img1, 0, 0, this);
break;
case 1:
g.drawImage(img2, 0, 0, this);
jContentPane.add(getJPanel1(), null);
break;
}
}
private JPanel getJContentPane() {
if (jContentPane == null) {
try {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.setOpaque(false);
} catch (java.lang.Throwable e) {
e.printStackTrace();
}
}
return jContentPane;
}
private JButton getB_Next() {
if (B_Next == null) {
try {
B_Next = new JButton();
B_Next.setText("NEXT");
B_Next.setLocation(new Point(559, 0));
B_Next.setSize(new Dimension(80, 40));
B_Next.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
i_step++;
repaint();
}
});
} catch (java.lang.Throwable e) {
e.printStackTrace();
}
}
return B_Next;
}
private JPanel getJPanel1() {
if (jPanel1 == null) {
try {
jPanel1 = new JPanel();
jPanel1.setOpaque(false);
jPanel1.setLayout(null);
jPanel1.setSize(new Dimension(640, 480));
jPanel1.setLocation(new Point(0, 0));
jPanel1.setPreferredSize(null);
jPanel1.add(getb1(), null);
} catch (java.lang.Throwable e) {
e.printStackTrace();
}
}
return jPanel1;
}
private JButton getb1() {
if (b1 == null) {
try {
b1 = new JButton();
b1.setSize(new Dimension(190, 40));
b1.setText("ボタン1");
b1.setLocation(new Point(90, 400));
b1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(
java.awt.event.ActionEvent e) {
}
});
} catch (java.lang.Throwable e) {
e.printStackTrace();
}
}
return b1;
}
}
ちなみに【ボタン1】は画像と重なる位置にあります。
super.paint(g);を
paintの最後に記述すると、ボタンは表示されますが、
画像が一瞬でて消えてしまいます。
何がいけないのでしょうか?
No.1ベストアンサー
- 回答日時:
何をやりたいのか、よく分からないので、抜本的なリファクタリングはできませんが、とりあえず、まともなJavaプログラムらしきものに書き直してみました。
よく見て、学習してください。わかんないことは、質問してね。(全角スペースを半角スペース2つに変えてからコンパイルして。)
あなたが学ぶべきことは山ほどあるけど、たとえば、Swingのメインフレームそのもの(ここではJApplet)のpaint()をオーバライドしてはいけません。必ず、自作のパネルオブジェクトのためのクラス(ここではMyPanel)を書くこと。
----------------------------------------------------
/* do
appletviewer Rabu.java
*/
/*
<applet code="Rabu" width="640" height="480"></applet>
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Rabu extends JApplet {
Image bimg, img1, img2;
private JButton bNext, b1;
private MyPanel jContentPane = null;
private JPanel jPanel1;
int iStep;
public void init() {
bNext = new JButton("NEXT");
b1 = new JButton("ボタン1");
b1.setBounds(90, 400, 190, 40);
b1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e){
}
});
jContentPane = new MyPanel();
jPanel1 = new JPanel();
jPanel1.setOpaque(false);
jPanel1.setLayout(null);
jPanel1.setBounds(0, 0, 640, 480);
jPanel1.add(b1);
// 画像の事前ロードを強制するために
// ImageIconのコンストラクタにMediaTrackerを
// ドライブさせる.
// そのままでは, 画像は実際にpaintされるとき
// やっとロードされるので, 最初はimg2をかなり待たされる.
ImageIcon ii1 = new ImageIcon
(img1 = getImage(getCodeBase(), "images/test.gif"));
ImageIcon ii2 = new ImageIcon
(img2 = getImage(getCodeBase(), "images/test2.gif"));
bimg = img1;
setContentPane(jContentPane);
bNext.setBounds(559, 0, 80, 40);
getContentPane().add(bNext);
bNext.addActionListener(new ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e) {
iStep++;
if (iStep % 2 != 0){
getContentPane().add(jPanel1);
}
else{
getContentPane().removeAll();
((JPanel)(getContentPane())).revalidate();
}
bimg = (iStep % 2 == 0) ? img1 : img2;
jContentPane.repaint();
getContentPane().add(bNext);
}
});
}
class MyPanel extends JPanel{
public MyPanel(){
setPreferredSize(new Dimension(640, 480));
setLayout(null);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
if (bimg != null){
g.drawImage(bimg, 0, 0, 640, 480, this);
}
}
}
}
------------------------------------------
早速の回答ありがとうございます。
教えていただいたソースで実行すると、思うとおりに動きました。
これから、このソースを元に、修正してみます。
本当に、はじめたばかりなので、これからがんばります。
また、わからなければ質問させていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンパイルエラー <identifier...
-
VB6.0でのTextboxの高さ変更
-
Enterキーでボタンを押すにはど...
-
JPanelの切り替えと再描画
-
javaで文字数制限するには?
-
java junit list同士の比較方法
-
JFrameとJPanelの最大化について
-
ボタンクリック後パネルを再描...
-
4択クイズでのランダム出題の...
-
VBAの繰り返し処理表記と複数の...
-
JTable の 列幅を個別に設定す...
-
ArrayListの使い方について(初...
-
タスクトレイのメニュからウィ...
-
エラーで式の開始が不正ですと...
-
【Swing】JPanel クラス外から...
-
C言語のポインターに関する警告
-
ジャバスクリプトについて。
-
System.err. printlnとSystem.o...
-
1~100までの数字を表示し、か...
-
javaで質問です。 文字列2023/2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
java junit list同士の比較方法
-
EXECLの行を削除
-
JPanelの切り替えと再描画
-
TextAreaでの文字の色
-
最後の行に移動するには?
-
コンパイルエラー <identifier...
-
連番をオブジェクト名の最後に...
-
JDialogを閉じた時の処理
-
JPanelの重ね方/OverlayLayout他
-
JTableの列ヘッダ
-
ボタンクリック後パネルを再描...
-
【Swing】JPanel クラス外から...
-
4択クイズでのランダム出題の...
-
次のように書いたのですが、ウ...
-
エラーで式の開始が不正ですと...
-
KeyListenerの使い方について
-
JavaでのSwingを使った簡易電卓...
-
あるコンボボックスを選択する...
-
ArrayListの使い方について(初...
-
VB6.0でのTextboxの高さ変更
おすすめ情報