![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
現在プログラミングを学んでいる、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()が間違っていると思うのですが、
具体的にどう直せばよいのかわかりません。
よろしくお願いします。
No.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);
}
}
}
--------------------------------------------------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<forEach> 内で供給された "ite...
-
eclipseに記述したjavaファイル...
-
ColabでのPytorchのエラー
-
Javaを使ってデジタル時計を作...
-
Selenium IDEでexportしたコー...
-
Javaで常駐するソフトを作って...
-
ActionForm form にnullが入っ...
-
setAttribute(String, int)は適...
-
jcpad
-
importとextendsの用い方の違い...
-
JOGLのインストール方法
-
「例外 *** は対応する try 文...
-
JavaでWindowsのタスクトレイに...
-
アプレットが初期化されていま...
-
【JAVAエラー】互換性のない型...
-
Javaを使用して定時送信をしたい
-
(急募/教えて)Java三択クイズを...
-
Javaからストアド実行(配列項目)
-
文字サイズが可変のラベル
-
【java】検索フォームの検索結...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「例外 *** は対応する try 文...
-
eclipseに記述したjavaファイル...
-
<forEach> 内で供給された "ite...
-
setAttribute(String, int)は適...
-
干支の計算で。。。
-
Javaを使ってデジタル時計を作...
-
HTMLでのTableタグデータ取得方法
-
importするには java.io.*; imp...
-
生年月日と今日の日付から年齢...
-
文字列を数式に
-
シャットダウンフックが呼ばれない
-
Javaで常駐するソフトを作って...
-
フレームの×ボタンを押しても閉...
-
Selenium IDEでexportしたコー...
-
文字サイズが可変のラベル
-
jFrameを使って複数の画面を生...
-
【java】検索フォームの検索結...
-
Java での グローバルIP取得
-
(急募)JavaカレンダーをGUI可に...
-
ファイル名を動的に生成したい
おすすめ情報