- ベストアンサー
ボタンがマウスオーバーしないと表示されない
- java初心者です。ボタンがマウスオーバーしないと表示されない
- i_step変数によって、表示する、画像や、パネルを替えたい。【ボタン1】が表示されませんが、マウスアップすると表示されるようになります。
- 【NEXT】ボタンは表示されるようになったが、画像が一瞬でて消えてしまいます。
- みんなの回答 (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); } } } } ------------------------------------------
お礼
早速の回答ありがとうございます。 教えていただいたソースで実行すると、思うとおりに動きました。 これから、このソースを元に、修正してみます。 本当に、はじめたばかりなので、これからがんばります。 また、わからなければ質問させていただきます。 ありがとうございました。