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

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

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

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

Q&A

解決済

2回答

2922閲覧

国旗を表示させたい(続き)

coffeee

総合スコア19

Java

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

0グッド

0クリップ

投稿2016/01/14 07:30

編集2016/01/14 07:41

###前提・実現したいこと
btn [0][1][2]をクリックすると、それに対応した国旗が表示されるようにしたい。

###ソースコード
import java.awt.;
import java.awt.event.
;
class ColorButton extends Frame implements ActionListener{
Button[] btn;
String[] ttl={"Germany","Indonesia","Romania","Exit"};
final int N=4;

ColorButton(String s, int w, int h){ super(s); int i; setSize(w,h); btn=new Button[N]; for(i=0;i<N;i++){ btn[i]=new Button(ttl[i]); btn[i].addActionListener(this); } Panel p=new Panel(); for(i=0;i<N;i++) p.add(btn[i]); p.setBackground(Color.pink); add(p,BorderLayout.SOUTH); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0);} }); } public void actionPerformed(ActionEvent e){ if(e.getSource()==btn[0]){ }else if(e.getSource()==btn[1]){ }else if(e.getSource()==btn[2]){ }else{ System.exit(0); } } int radius=30,width=250,height=75; public void paint(Graphics g){ g.setColor(Color.red); g.fillRect(30,60,width,height); g.setColor(Color.white); g.fillRect(30,130,width,height); g.setFont(f); g.setColor(Color.darkGray); g.drawString("Indonesia",50,240); width=width/3;height=height*2; g.setColor(Color.blue); g.fillRect(300,60,width,height); g.setColor(Color.yellow); g.fillRect(300+width,60,width,height); g.setColor(Color.red); g.fillRect(300+width*2,60,width,height); g.setFont(f); g.setColor(Color.darkGray); g.drawString("Romania",300,240); width=width*3;height=height/3; g.setColor(Color.black); g.fillRect(570,60,width,height); g.setColor(Color.red); g.fillRect(570,60+height,width,height); g.setColor(Color.yellow); g.fillRect(570,60+height*2,width,height); g.setFont(f); g.setColor(Color.darkGray); g.drawString("Germany",570,240); } public static void main(String[] args){ ColorButton a=new ColorButton("National flag",300,200); a.setVisible(true); }

}

###補足情報(言語/FW/ツール等のバージョンなど)
Javaです。よろしくお願い致します。

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

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

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

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

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

coco_bauer

2016/01/14 07:44

何が問題なのでしょうか? アプレットのプログラムと思われますが、import java.applet.Applet; import javax.swing.*;が見当たらないのは気になります。 また、アプレットの動作確認をする方法はご存知ですか? 確認に使うブラウザがjavaとappletの使用を許可しているか確認なさいましたか?
coffeee

2016/01/14 07:59

コマンドプロンプトを用いてコンパイルする時点でエラーが出てしまいます。 g.setfont(f); という箇所に対して「シンボルを見つけられません」と表示されます。
izkn

2016/01/14 14:57

こちらの質問が他のユーザから「質問の範囲が広すぎる」という評価を受けています わからない点を明確にし、調査したこと・試したことと共に記入していただくと、回答が得られやすくなります。
coco_bauer

2016/01/15 01:26

graphicsオブジェクトのフォントを設定するメソッド名は、setFontです。setfontというメソッドは無いのでコンパイルエラーになっています(4文字目が小文字のfではなく、大文字のFが正しい)。javaは大文字/小文字を区別しますから、大文字/小文字も間違えないように注意してください。
guest

回答2

0

FlagFrame.java で保存。パッケージは適当に変更してください。画像とソース同時にあげたらソースだけなぜかトリミング?されたのでソースだけの書き込みをやりました。

java

1package com.test.swing.util; 2 3import java.awt.BorderLayout; 4import java.awt.Graphics; 5import java.awt.GridLayout; 6import java.awt.event.ActionEvent; 7import java.awt.event.ActionListener; 8import java.io.File; 9import java.util.ArrayList; 10import java.util.List; 11import java.util.Random; 12 13import javax.swing.ImageIcon; 14import javax.swing.JButton; 15import javax.swing.JFrame; 16import javax.swing.JPanel; 17 18/** 19 * 画像ダウンロード先 20 * http://www.irasutoya.com/2012/05/asia.html 21 * 22 * eclipseLuna 4.4 Java8 で動作確認済み 23 * 24 * images/ フォルダを作りそこに上記無料画像のHPからダウンロードした画像を格納してください。 25 * 26 * プログラムはimages/ フォルダにある画像ファイル分のボタンを生成、 27 * ボタン表示名に画像ファイル名を短縮した名称、ツールチップにフルパス、 28 * ボタンクリックすると画面中央にその国旗を表示します。 29 */ 30public class FlagFrame extends JFrame implements ActionListener { 31 32 /** 33 * 34 */ 35 private static final long serialVersionUID = -5353814936444576118L; 36 37 public static void main(String[] args) { 38 new FlagFrame(new File("images")); 39 } 40 41 public FlagFrame(File folderPath) { 42 43 initLayout(folderPath); 44 } 45 46 private String cmd; 47 48 private void initLayout(File path) { 49 50 super.setLayout(new BorderLayout()); 51 52 List<File> files = new ArrayList<File>(); 53 54 for (File f : path.listFiles()) { 55 files.add(f); 56 } 57 58 final int BUTON_NUM = 8; 59 JPanel panel = new JPanel(new GridLayout((int)(files.size() / BUTON_NUM) + 1, BUTON_NUM)); 60 Random random = new Random(); 61 62 int max = files.size(); 63 for (int i=0;i < max;i++) { 64 int r = random.nextInt(files.size()); 65 File oFile = files.get(r); 66 67 String fileName = oFile.getName(); 68 if (fileName.length() > 5) { 69 fileName = fileName.substring(0, 3) + "..." + fileName.substring(fileName.length() - 5); 70 } 71 JButton button = new JButton(fileName); 72 button.addActionListener(this); 73 button.setActionCommand(oFile.getAbsolutePath()); 74 // button.setIgnoreRepaint(true); 75 button.setToolTipText(oFile.getAbsolutePath()); 76 panel.add(button); 77 System.out.println(oFile.toString()); 78 79 files.remove(r); 80 } 81 super.add(panel, BorderLayout.NORTH); 82 83 JPanel renderPanel = new JPanel() { 84 85 private static final long serialVersionUID = -3107296751372342247L; 86 87 @Override 88 public void paint(Graphics g) { 89 90 if (cmd != null) { 91 ImageIcon imageIcon = new ImageIcon(cmd); 92 93 System.out.println("render: " + cmd); 94 95 g.drawImage(imageIcon.getImage(), 100, 100, null); 96 97 cmd = null; 98 99 } 100 } 101 }; 102 super.add(renderPanel, BorderLayout.CENTER); 103 104 super.setDefaultCloseOperation(EXIT_ON_CLOSE); 105 super.setSize(800, 600); 106 super.setVisible(true); 107 } 108 109 @Override 110 public void actionPerformed(ActionEvent e) { 111 JButton button = (JButton) e.getSource(); 112 cmd = button.getActionCommand(); 113 System.out.println("repaint target: " + cmd); 114 super.repaint(); 115 } 116} 117

投稿2016/01/14 14:52

ipadcaron

総合スコア1693

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

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

ipadcaron

2016/01/14 14:55

「> 5」 は潜在バグですね、適当に直しておいてください。
guest

0

ベストアンサー

何が聞きたい、知りたいんでスカ
わたしがアドバイスするとしたら、jbutton を継承した国旗クラスを用意して処理を纏める。
座標とか指定せずに、レイアウトマネージャーのレイアウトに委ねる書き方に改める。
今より倍くらい長いソースになっちゃうけど、処理単位が纏まるのと同じような記述がへるので
読みやすくなります。
ーーーーーーーー追記
イメージ説明

java

1package com.test.swing.util; 2 3import java.awt.BorderLayout; 4import java.awt.Graphics; 5import java.awt.GridLayout; 6import java.awt.event.ActionEvent; 7import java.awt.event.ActionListener; 8import java.io.File; 9import java.util.ArrayList; 10import java.util.List; 11import java.util.Random; 12 13import javax.swing.ImageIcon; 14import javax.swing.JButton; 15import javax.swing.JFrame; 16import javax.swing.JPanel; 17 18/** 19 * 画像ダウンロード先 20 *  http://www.irasutoya.com/2012/05/asia.html 21 * 22 * eclipseLuna 4.4 Java8 で動作確認済み 23 * 24 * images/ フォルダを作りそこに上記無料画像のHPからダウンロードした画像を格納してください。 25 * 26 * プログラムはimages/ フォルダにある画像ファイル分のボタンを生成、 27 * ボタン表示名に画像ファイル名を短縮した名称、ツールチップにフルパス、 28 * ボタンクリックすると画面中央にその国旗を表示します。 29 */ 30public class FlagFrame extends JFrame implements ActionListener { 31 32 /** 33 * 34 */ 35 private static final long serialVersionUID = -5353814936444576118L; 36 37 public static void main(String[] args) { 38 new FlagFrame(new File("images")); 39 } 40 41 public FlagFrame(File folderPath) { 42 43 initLayout(folderPath); 44 } 45 46 private String cmd; 47 48 private void initLayout(File path) { 49 50 super.setLayout(new BorderLayout()); 51 52 List<File> files = new ArrayList<File>(); 53 54 for (File f : path.listFiles()) { 55 files.add(f); 56 } 57 58 final int BUTON_NUM = 8; 59 JPanel panel = new JPanel(new GridLayout((int)(files.size() / BUTON_NUM) + 1, BUTON_NUM)); 60 Random random = new Random(); 61 62 int max = files.size(); 63 for (int i=0;i < max;i++) { 64 int r = random.nextInt(files.size()); 65 File oFile = files.get(r); 66 67 String fileName = oFile.getName(); 68 if (fileName.length() > 5) { 69 fileName = fileName.substring(0, 3) + "..." + fileName.substring(fileName.length() - 5); 70 } 71 JButton button = new JButton(fileName); 72 button.addActionListener(this); 73 button.setActionCommand(oFile.getAbsolutePath()); 74 // button.setIgnoreRepaint(true); 75 button.setToolTipText(oFile.getAbsolutePath()); 76 panel.add(button); 77 System.out.println(oFile.toString()); 78 79 files.remove(r); 80 } 81 super.add(panel, BorderLayout.NORTH); 82 83 JPanel renderPanel = new JPanel() { 84 85 private static final long serialVersionUID = -3107296751372342247L; 86 87 @Override 88 public void paint(Graphics g) { 89 90 if (cmd != null) { 91 ImageIcon imageIcon = new ImageIcon(cmd); 92 93 System.out.println("render: " + cmd); 94 95 g.drawImage(imageIcon.getImage(), 100, 100, null); 96 97 cmd = null; 98 99 } 100 } 101 }; 102 super.add(renderPanel, BorderLayout.CENTER); 103 104 super.setDefaultCloseOperation(EXIT_ON_CLOSE); 105 super.setSize(800, 600); 106 super.setVisible(true); 107 } 108 109 @Override 110 public void actionPerformed(ActionEvent e) { 111 JButton button = (JButton) e.getSource(); 112 cmd = button.getActionCommand(); 113 System.out.println("repaint target: " + cmd); 114 super.repaint(); 115 } 116} 117

ソース見難いじゃねーの、とか言っておきながら自分のも見難いですね;;;反省。

投稿2016/01/14 07:36

編集2016/01/14 14:49
ipadcaron

総合スコア1693

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

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

coffeee

2016/01/14 07:43

ご回答ありがとうございます。 国旗クラスをまとめるにはどのように書けば良いのでしょうか?
coffeee

2016/01/15 12:52

画像を読み込ませて国旗を表示させるという手もあるのですね。 勉強になりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問