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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

2回答

4727閲覧

javaアプリケーションで画像表示するにはどうしたらいいんでしょうか。

taiyokarasu

総合スコア27

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2016/12/26 02:32

package rol; import java.awt.Color; import java.awt.Graphics; import com.sun.javafx.tk.Toolkit; import com.sun.prism.Image; //<applet code="ren11.class" width="400" height= "400"></applet> /** *プレイヤークラス<p> *移動処理、描画処理など */ public class Player extends GameObject { double speed; Image img; Toolkit toolkit; /** * コンストラクタ * @param ix 生成先のx座標 * @param iy 生成先のy座標 * @param ispeed 移動スピード */ Player(double ix, double iy, double ispeed) { x = ix; y = iy; speed = ispeed; active = false; } /** * ダミー関数<p> * (引数がスーパークラスのアブストラクト・メソッドの定義と異なるため) */ public void move() { } /** * 移動処理 * @param mx x方向の入力(-1 ... +1) * @param my y方向の入力(-1 ... +1) */ public void move(int mx, int my) { //Canvasの外には移動できないようにする double postX = x + mx * speed; double postY = y + my * speed; if ((0 < postX)&&(postX < 580)) { x = postX; } if ((0 < postY)&&(postY < 550)) { y = postY; } } //描画処理 public void draw(Graphics g) { if(active){ g.setColor(Color.gray); //横 g.drawLine((int)x, (int)y-14, (int)x, (int)y-17); g.drawLine((int)x, (int)y-16, (int)x-5, (int)y-16); g.drawLine((int)x, (int)y-16, (int)x+5, (int)y-16); g.drawLine((int)(x),(int)(y-14),(int)(x+2),(int)(y-14)); g.drawLine((int)(x),(int)(y-14),(int)(x-2),(int)(y-14)); //縦 g.drawLine((int)(x-2),(int)(y-14),(int)(x-3),(int)(y-9)); g.drawLine((int)(x+2),(int)(y-14),(int)(x+3),(int)(y-9)); //横 g.drawLine((int)(x+3),(int)(y-9),(int)(x-3),(int)(y-9)); g.fillRect((int)(x-2),(int)(y-14),(int)5,(int)1); g.fillRect((int)(x-3),(int)(y-14),(int)7,(int)5); g.setColor(Color.green); //胴体 g.drawLine((int)(x+3),(int)(y-9),(int)(x+3),(int)(y-7)); g.drawLine((int)(x-3),(int)(y-9),(int)(x-3),(int)(y-7)); g.drawLine((int)(x+3),(int)(y-7),(int)(x+4),(int)(y-5)); g.drawLine((int)(x-3),(int)(y-7),(int)(x-4),(int)(y-5)); g.drawLine((int)(x+4),(int)(y-5),(int)(x+4),(int)(y)); g.drawLine((int)(x-4),(int)(y-5),(int)(x-4),(int)(y)); g.drawLine((int)(x+4),(int)(y),(int)(x+3),(int)(y+7)); g.drawLine((int)(x-4),(int)(y),(int)(x-3),(int)(y+7)); g.drawLine((int)(x-3),(int)(y+7),(int)(x-3),(int)(y+10)); g.drawLine((int)(x+3),(int)(y+7),(int)(x+3),(int)(y+10)); g.drawLine((int)(x+3),(int)(y+10),(int)(x+2),(int)(y+15)); g.drawLine((int)(x-3),(int)(y+10),(int)(x-2),(int)(y+15)); g.drawLine((int)(x+2),(int)(y+13),(int)(x+1),(int)(y+20)); g.drawLine((int)(x-2),(int)(y+13),(int)(x-1),(int)(y+20)); g.drawLine((int)(x-1),(int)(y+20),(int)(x),(int)(y+25)); g.drawLine((int)(x+1),(int)(y+20),(int)(x),(int)(y+25)); //尾 g.drawLine((int)(x),(int)(y+25),(int)(x+5),(int)(y+25)); g.drawLine((int)(x),(int)(y+25),(int)(x-5),(int)(y+25)); g.drawLine((int)(x+5),(int)(y+25),(int)(x+8),(int)(y+24)); g.drawLine((int)(x-5),(int)(y+25),(int)(x-8),(int)(y+24)); g.drawLine((int)(x-8),(int)(y+24),(int)(x-9),(int)(y+23)); g.drawLine((int)(x+8),(int)(y+24),(int)(x+9),(int)(y+23)); g.drawLine((int)(x-9),(int)(y+23),(int)(x-10),(int)(y+23)); g.drawLine((int)(x+9),(int)(y+23),(int)(x+10),(int)(y+23)); g.drawLine((int)(x-10),(int)(y+23),(int)(x-10),(int)(y+21)); g.drawLine((int)(x+10),(int)(y+23),(int)(x+10),(int)(y+21)); g.drawLine((int)(x+10),(int)(y+21),(int)(x+8),(int)(y+21)); g.drawLine((int)(x-10),(int)(y+21),(int)(x-8),(int)(y+21)); g.drawLine((int)(x+8),(int)(y+21),(int)(x+5),(int)(y+20)); g.drawLine((int)(x-8),(int)(y+21),(int)(x-5),(int)(y+20)); g.drawLine((int)(x+5),(int)(y+20),(int)(x+3),(int)(y+20)); g.drawLine((int)(x-5),(int)(y+20),(int)(x-3),(int)(y+20)); //翼 g.drawLine((int)(x-5),(int)(y-8),(int)(x-10),(int)(y-7)); g.drawLine((int)(x+5),(int)(y-8),(int)(x+10),(int)(y-7)); //翼 前 横 g.drawLine((int)(x-10),(int)(y-7),(int)(x-23),(int)(y-7)); g.drawLine((int)(x+10),(int)(y-7),(int)(x+23),(int)(y-7)); g.fillRect((int)x-23,(int)y-7,15,7); g.fillRect((int)x+10,(int)y-7,15,7); //翼 横 g.drawLine((int)(x-23),(int)(y-7),(int)(x-24),(int)(y-6)); g.drawLine((int)(x+23),(int)(y-7),(int)(x+24),(int)(y-6)); g.drawLine((int)(x-24),(int)(y-6),(int)(x-24),(int)(y+1)); g.drawLine((int)(x+24),(int)(y-6),(int)(x+24),(int)(y+1)); //翼 後 横 g.drawLine((int)(x+24),(int)(y+1),(int)(x+23),(int)(y+1)); g.drawLine((int)(x-24),(int)(y+1),(int)(x-23),(int)(y+1)); g.drawLine((int)(x+24),(int)(y+1),(int)(x+8),(int)(y+1)); g.drawLine((int)(x-24),(int)(y+1),(int)(x-8),(int)(y+1)); g.setColor(Color.red); g.fillRect((int)x-1,(int)y-9,4,8); } } }

上のプログラムは、drawLineを使っているのですが、javaアプリケーションとアプレットではプログラムの形式が変わると聞きました。しかし、javaアプリケーションでgetImageやdrawImageをどう入力していいのか、調べてみたのですがよくわかりません。

img1=getImage(getDocumentBase();

これをjavaアプリケーション風にするには何かをつけたせばいいんでしょうか
それとも、形式自体が違うのでしょうか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ひとまずOracleが提供している標準のライブラリーを用いたPC(Linux, Mac, Windowsなど)上でのスタンドアロンアプリケーションと仮定しますと、Java1.8以降ではswingおよびJavaFXがあり後者がGUIの標準ということになっています。ご質問のコードの雰囲気からとりあえずswingを想定して回答しますがJavaFXではまた違ったAPIになる点にご注意ください。

手軽な例として以下のような方法はいかがでしょうか。

java

1class MyPanel { 2 MyPanel() { 3 URL url = MyPanel.class.getResource("image1.jpg"); 4 try { 5 Image image = ImageIO.read(url); 6 ... 7 } catch (IOException ex) { 8 例外処理 9 } 10 } 11}

Class#getResourceはそのクラス(上のコード例ではMyPanel)のクラスファイルがある場所の相対位置のリソースのURLを得るためのものです。EclipseならsrcフォルダのMyClass.javaと同じ場所に画像ファイルを配置しておくことでファイル名だけ指定すればよいので手軽です。Javaソースとは別のフォルダーで管理するならばその場所を相対位置で指定することになります。
このURLを使い上の例のようにするとImage(実際にはBufferedImage)のインスタンスが得られます。ImageIO.readにはオーバーロードされた他のバリエーションがありますのでそれらについてはAPIリファレンスを参照してみてください。

投稿2016/12/26 06:51

KSwordOfHaste

総合スコア18394

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

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

taiyokarasu

2017/01/14 14:00 編集

img1 = Toolkit.getDefaultToolkit().getImage("EDGE54.png"); void paint(Graphics g) { if (active) { g.drawImage(img1, 210, 20, null); } } このプログラムでも同じようなことが可能でしょうか?
KSwordOfHaste

2017/01/14 14:31

そのイメージをawt/swingコンポーネント上でそのまま描画する目的のみで用いる場合はその方法でよいと思います。自分はawtを学び始めたころにしかそれを使ったことがないので記憶違いがあるかも知れませんが、その方法でロードするイメージはロードが完了するまでサイズが未知になるといった制約があったように思います。しかしawt/swingの画面構成を(よくあるように)自分で固定的に指定するのではなく、制約指向で設計しイメージがロードされた際に確定するサイズに従って自動的に適切なサイズにリサイズするといった方法で設計できれば問題ないと思います。自分は最初のころこの「制約指向」についてよくわかっておらず苦労した覚えがあります。その点ImageIO.readの結果はBufferedImageなのでreadメソッド完了時にはイメージのロードが完了しておりサイズも確定していますし、ロードしたイメージを好きに加工しやすいといった利点もあります。そういったもろもろを考えてImageIO.readをお勧めしてみました。
guest

0

JavaアプリケーションとはJavaで書かれたプログラムのことで、AppletもJavaアプリケーションの一種です。

あなたの言うJavaアプリケーションが何を指すのかは良く分かりませんが、「JavaFX」や「Swing」などのキーワードを活用して調べて見てください。

投稿2016/12/26 05:06

carimatics

総合スコア740

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問