dポイントプレゼントキャンペーン実施中!

現在プログラミングを学んでいる、Java初心者です。
最初に何もない状態から、
ボタンを押すと画像が表示され、
ボタンを押すたびに画像が階段状に重なり、
何度か押すと、最初の場所に別の画像が
表示されるアプレットを作りたいです。
そこで簡単なソースを書いてみました。

/*
*<Applet code=cardTest width=300 height=650>
*</Applet>
*/


import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.*;
import javax.swing.border.*;

public class cardTest extends JApplet implements ActionListener{
  JPanel pan1,pan2;
  JButton hbtn=new JButton("hit");
  int y =1;
  int cardPoint=0;
  Image dk,bust;
  Graphics g;

  public void init(){
Container con=getContentPane();
pan1=new JPanel();
pan2=new JPanel();
con.add(pan1);
con.add(pan2,"South");

pan1.setLayout(null);
pan1.setBackground(Color.green);
pan1.setSize(250,600);

pan2.setSize(250,100);
pan2.add(hbtn);

hbtn.addActionListener(this);

dk=getImage(getCodeBase(),"dk.GIF");
bust=getImage(getCodeBase(),"bust.gif");
  }

  public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("hit")){
     System.out.println("hit!");
cardDisp();
}
  }

  public void cardDisp(){
System.out.println("carddisp!");
if(cardPoint>21){
System.out.println("bust!");
g.drawImage(bust,0,0,this);
}else{
System.out.println("card!");
g.drawImage(dk,0,0+y*10,this);
cardPoint+=10;
y++;
}
  }
}
確認用に、いくつかコメントが表示されるようにしています。
重ね表示するのでラベルは使えないと思い、
参考書が見つからず困っています。
cardDisp()が間違っていると思うのですが、
具体的にどう直せばよいのかわかりません。
よろしくお願いします。

A 回答 (1件)

あなたはまず、Javaのグラフィクスプログラミングの基本を勉強する必要があります。

ベストの場所はhttp://java.sun.com/docs/books/tutorial/uiswing/ですが、まず玄関だけを簡単に見るためには「ひとつ上をゆくJavaの教科書」(技術評論社)の第10章がおすすめです。

関連して、今あなたが使っている参考書は、ものすごく古いですから、それは使わないでください。(“古い”の詳細はここでは略します。)

なお、画像がほんとうに重なって表示されるためには、pngのような、アルファ成分(透明成分)のある画像ファイルを使う必要があります。以下の例示プログラムは、そこまでの配慮はしていません。
----------------------------------------------------
/*
*<Applet code="Locoko" width="300" height="650">
*</Applet>
*/
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.border.*;

public class Locoko extends JApplet implements ActionListener{
static final int thres = 20;
static final int lap = 15;

JPanel pan1, pan2;
JButton hbtn = new JButton("hit");
int y = 0;
int lapc;
Image dk, bust;
BufferedImage img;
Graphics2D ig;

public void init(){
Container con = getContentPane();

pan1 = new JPanel(){
{ setPreferredSize(new Dimension(250, 600));
setBackground(Color.green);
}

public void paintComponent(Graphics g){
super.paintComponent(g);
lapc = y - 1;

if (img == null){
img = new BufferedImage(pan1.getWidth(), pan1.getHeight(),
//use TYPE_INT_ARGB for transparent image
BufferedImage.TYPE_INT_RGB);
ig = img.createGraphics();
ig.setColor(Color.green);
ig.fillRect(0, 0, pan1.getWidth(), pan1.getHeight());
}

if (y > 0 && y <= thres){
ig.drawImage(dk, 0, 0 + y * lapc, pan1);
}
else if (y > thres){
ig.drawImage(bust, 0, 0, pan1);
}
g.drawImage(img, 0, 0, this);
}
};

pan2 = new JPanel();
pan2.setBackground(Color.pink);
con.add(pan1, BorderLayout.CENTER);
con.add(pan2, BorderLayout.SOUTH);

pan2.setPreferredSize(new Dimension(250, 100));
pan2.add(hbtn);

hbtn.addActionListener(this);

dk = getImage(getCodeBase(), "dk.gif");
bust = getImage(getCodeBase(),"bust.gif");
}

public void actionPerformed(ActionEvent e){
if(e.getSource() == hbtn){
cardDisp();
}
}

public void cardDisp(){
++y;
pan1.repaint();
if (y > thres){
hbtn.setEnabled(false);
}
}
}
--------------------------------------------------
    • good
    • 0
この回答へのお礼

これです!
ありがとうございます。
本が古いこともありますが、自分のレベル不足を感じました。。
勉強します。

お礼日時:2007/11/28 11:21

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