• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ボタンがマウスオーバーしないと表示されない)

ボタンがマウスオーバーしないと表示されない

このQ&Aのポイント
  • java初心者です。ボタンがマウスオーバーしないと表示されない
  • i_step変数によって、表示する、画像や、パネルを替えたい。【ボタン1】が表示されませんが、マウスアップすると表示されるようになります。
  • 【NEXT】ボタンは表示されるようになったが、画像が一瞬でて消えてしまいます。

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

  • ベストアンサー
  • _ranco_
  • ベストアンサー率58% (126/214)
回答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);    }   }  } } ------------------------------------------

rabu_chihaha
質問者

お礼

早速の回答ありがとうございます。 教えていただいたソースで実行すると、思うとおりに動きました。 これから、このソースを元に、修正してみます。 本当に、はじめたばかりなので、これからがんばります。 また、わからなければ質問させていただきます。 ありがとうございました。

関連するQ&A