質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

375閲覧

Appletが表示がされない

MISHIRO

総合スコア27

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/06/28 03:57

編集2017/06/28 04:02

下記のコードの場合なぜか表示がされません。
OutputScreenメソッドを使わずにpaintメソッドにべた書きした場合はうまく動作します。
Dimension size = getSize();
back = createImage(size.width, size.height);
buffer = back.getGraphics();
このbufferが原因のように思えるのですがこのような使い方はできないのですか?

java

1public class MyApplet extends Applet implements MouseListener { 2 3 Image back; 4 Graphics buffer; 5 private Image enemy; 6 private Image player; 7 Font font; 8 private int drawValueMain = 40; 9 private int drawValueSub = 70; 10 private int drawRectUnder = 700; 11 private int drawLineUnder = 740; 12 private int drawCorner = 15; 13 private int drawStringMainX = 55; 14 private int drawStringSubX = 35; 15 private int drawStringY = 100; 16 private int drawCardWidth = 150; 17 private int drawCardHigh = 200; 18 private int drawCardCenter = 925; 19 private int drawCardOverPlayer = 500; 20 private int drawCardUnderPlayer = 730; 21 private int drawCradInterval = 180; 22 private int drawCardOverEnemy = 50; 23 private int drawCardUnderEnemy = 280; 24 private int BattleFieldX = 400; 25 private int BattleFieldY = 40; 26 private int BattleFieldWidth = 1200; 27 private int BattleFieldHigh = 900; 28 private int BattleFieldPartition = 150; 29 private int profileImageWidth = 100; 30 private int profileImageHigh = 150; 31 private int profileImageAroundWidth = 25; 32 33 private String[] number = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }; 34 35 public void init() { 36 addMouseListener(this); 37 enemy = getImage(getCodeBase(), "https://www.sanrio.co.jp/wp-content/uploads/2013/09/osarunomonkichi_b.png"); 38 player = getImage(getCodeBase(), "https://www.sanrio.co.jp/wp-content/uploads/2013/09/hellokitty_b.png"); 39 40 Dimension size = getSize(); 41 back = createImage(size.width, size.height); 42 buffer = back.getGraphics(); 43 } 44 45 public void paint(Graphics g) { 46 OutputScreen(buffer); 47 } 48 49 public void OutputScreen(Graphics g){ 50 font = new Font("DailogInput", Font.BOLD, 70); 51 52 // 表の四角形 53 g.drawRoundRect(drawValueMain, drawValueMain, drawValueSub * 2, drawRectUnder, drawCorner, drawCorner); 54 55 // バトルフィールドの四角形 56 g.drawRoundRect(BattleFieldX, BattleFieldY, BattleFieldWidth, BattleFieldHigh, drawCorner * 2, drawCorner * 2); 57 58 // バトルフィールドの横線 59 g.drawLine(BattleFieldX, (BattleFieldHigh+drawValueMain*2)/2, BattleFieldX+BattleFieldWidth, (BattleFieldHigh+drawValueMain*2)/2); 60 61 // バトルフィールドのキャラ画像との仕切り線 62 g.drawLine(BattleFieldX+BattleFieldPartition, drawValueMain, BattleFieldX+BattleFieldPartition, (BattleFieldHigh+drawValueMain*2)/2); 63 g.drawLine(BattleFieldX+BattleFieldWidth-BattleFieldPartition, (BattleFieldHigh+drawValueMain*2)/2, BattleFieldX+BattleFieldWidth-BattleFieldPartition, BattleFieldHigh+drawValueMain); 64 65 // キャラ画像用の枠 66 g.drawRect(BattleFieldX+profileImageAroundWidth, BattleFieldY+profileImageAroundWidth, profileImageWidth, profileImageHigh); 67 g.drawRect(BattleFieldX+BattleFieldWidth-BattleFieldPartition+profileImageAroundWidth, (BattleFieldHigh+drawValueMain*2)/2+profileImageAroundWidth, profileImageWidth, profileImageHigh); 68 69 // キャラ画像添付 70 g.drawImage(enemy, BattleFieldX+profileImageAroundWidth, BattleFieldY+profileImageAroundWidth, profileImageWidth, profileImageHigh, this); 71 g.drawImage(player, BattleFieldX+BattleFieldWidth-BattleFieldPartition+profileImageAroundWidth, (BattleFieldHigh+drawValueMain*2)/2+profileImageAroundWidth, profileImageWidth, profileImageHigh, this); 72 73 // カード用の枠 player 74 g.drawRect(drawCardCenter, drawCardOverPlayer, drawCardWidth, drawCardHigh); 75 g.drawRect(drawCardCenter-drawCradInterval, drawCardUnderPlayer, drawCardWidth, drawCardHigh); 76 g.drawRect(drawCardCenter, drawCardUnderPlayer, drawCardWidth, drawCardHigh); 77 g.drawRect(drawCardCenter+drawCradInterval, drawCardUnderPlayer, drawCardWidth, drawCardHigh); 78 79 // カード用の枠 enemy 80 g.drawRect(drawCardCenter, drawCardUnderEnemy, drawCardWidth, drawCardHigh); 81 g.drawRect(drawCardCenter-drawCradInterval, drawCardOverEnemy, drawCardWidth, drawCardHigh); 82 g.drawRect(drawCardCenter, drawCardOverEnemy, drawCardWidth, drawCardHigh); 83 g.drawRect(drawCardCenter+drawCradInterval, drawCardOverEnemy, drawCardWidth, drawCardHigh); 84 85 // 表の縦線 86 for (int i = 1; i < 2; i++) { 87 g.drawLine(drawValueMain + drawValueSub * i, drawValueMain, drawValueMain + drawValueSub * i, 88 drawLineUnder); 89 } 90 91 // 表の横線 92 for (int i = 1; i < 10; i++) { 93 g.drawLine(drawValueMain, drawValueMain + drawValueSub * i, drawValueMain + drawValueSub * 2, 94 drawValueMain + drawValueSub * i); 95 } 96 97 // 対戦番号の表示 98 g.setFont(font); 99 for (int i = 0; i < 9; i++) { 100 g.drawString(number[i], drawStringMainX, drawStringY + drawValueSub * i); 101 } 102 g.drawString(number[9], drawStringSubX, drawStringY + drawValueSub * 9); 103 } 104 105 public void mouseClicked(MouseEvent e) { 106 Point point = e.getPoint(); 107 System.out.println("X座標:" + point.x); 108 System.out.println("Y座標:" + point.y); 109 } 110 111 @Override 112 public void mousePressed(MouseEvent e) { 113 114 } 115 116 @Override 117 public void mouseReleased(MouseEvent e) { 118 119 } 120 121 @Override 122 public void mouseEntered(MouseEvent e) { 123 124 } 125 126 @Override 127 public void mouseExited(MouseEvent e) { 128 129 } 130}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mattn

2017/06/28 04:36

ちなみにですが、サンリオのキャラを許諾なしに使うのはちょっとどうかと思います。
MISHIRO

2017/06/28 04:56

すみません。あくまで個人で作っていた趣味程度の間隔だったのでそこまで気にしていませんでした。
guest

回答2

0

ベストアンサー

原因はOutputScreenが出力に用いているbuffer(Graphics)の出力先がImageとなっていて、アプレット画面でないからです。OutputScreenに書かれた全ての描画はback(Image)へ描画されてはいるのですが、back自体をアプレット画面へ描画し忘れているのですね。

paintメソッドを次のようにすればとりあえず描画されます。

java

1public void paint(Graphics g) { 2 OutputScreen(buffer); 3 g.drawImage(back, 0, 0, this); //この行を追加 4}

投稿2017/06/28 04:28

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2017/06/28 04:29

失礼、mattnさんの回答とかぶっちゃいました。
MISHIRO

2017/06/28 04:33

回答ありがとうございます。 うまく動作することができました。
guest

0

paint を以下に変えてみて下さい。

java

1OutputScreen(buffer); 2g.drawImage(back, 0, 0, this);

なぜこの様な使い方をするのか、おそらく理解されておられないのだろうなと思うので説明しておきます。
Graphics g に対して描画を行うと、その都度画面に描画されます。つまりチラつきが発生するのです。これを抑える為にバックバッファ(ダブルバッファ)という、メモリ上の表示デバイスに一旦描いておいて、書きあがったら一気に転写するという方式を取ります。こうする事で描画中のチラツキを抑えます。

投稿2017/06/28 04:19

編集2017/06/28 04:26
mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MISHIRO

2017/06/28 04:22

回答ありがとうございます。 g.drawImage(buffer, 0, 0, this); でエラーが発生してしまいます。
mattn

2017/06/28 04:23

どの様なエラーでしょうか
mattn

2017/06/28 04:26

あ、すみません。気づきました。直します。
mattn

2017/06/28 04:27

これで如何でしょうか?
MISHIRO

2017/06/28 04:28

型 Graphics のメソッド drawImage(Image, int, int, ImageObserver) は引数 (Graphics, int, int, MyApplet) に適用できません と出ています。
MISHIRO

2017/06/28 04:35

KSwordOfHasteさんが回答してくださったのですが bufferではなく、backにしたらうまく動作しました。 なぜbuffrtではだめなのかわかりませんが、これでいいみたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問