ImageChart | サンプルソース | |
---|---|---|
JLabelのHTML表示機能を使って、棒グラフを作ってます。Webプログラムの手法をSwingにも活用しよう! |
ImageChart.java |
/** * 愛のJava256本ノック for Java 5.0 * Javaサンプルソース ver0.2C "ImageChart" * ImageChart.java 「JLabelのHTML表示機能で棒グラフを簡単に表示」 * * 2005/09/23 制作:安永ノリカズ * * 【コンパイル&実行方法】 * >javac ImageChart.java * >java ImageChart * 【キーワード】 * HTML(HyperText Markup Language), tableタグ, imgタグ, * URL(Uniform Resource Locator) * 【試してみよう】 * JLabelの内容をSystem.out.printlnで表示して、画像ファイルのURLを確認する。 * tableタグのborder属性で表に枠をつける。 * 項目ごとの数値も表示する。 */ import java.awt.BorderLayout; import java.awt.Color; import java.io.File; import java.lang.String; import java.lang.StringBuffer; import java.net.MalformedURLException; import java.net.URL; import javax.swing.JFrame; import javax.swing.JLabel; public class ImageChart extends JFrame { public ImageChart() { Item[] L00 = { new Item("A社", "image/bar01.gif", 48), new Item("B社", "image/bar02.gif", 159), new Item("C社", "image/bar03.gif", 106), new Item("D社", "image/bar04.gif", 89), }; StringBuffer L01 = new StringBuffer(); L01.append("<html><table cellpadding='4' cellspacing='4'>"); for (Item L02 : L00) { L01.append(String.format("<tr><td>%s</td><td>%s</td></tr>", L02.M00(), L02.M01())); } L01.append("</table></html>"); add(new JLabel(L01.toString()), BorderLayout.CENTER); } public static void main(String[] A00) { JFrame L00 = new ImageChart(); L00.setTitle("画像を使ったグラフ"); L00.getContentPane().setBackground(Color.white); L00.setDefaultCloseOperation(EXIT_ON_CLOSE); L00.pack(); L00.setResizable(false); L00.setVisible(true); } } class Item { private String I00; private String I01; private int I02; Item(String A00, String A01, int A02) { this.I00 = A00; this.I01 = A01; this.I02 = A02; } public String M00() { return I00; } public String M01() { String L00 = ""; try { URL L01 = new File(I01).toURL(); L00 = String.format("<img src='%s' width='%d'>", L01, I02); } catch (MalformedURLException e) { System.out.println("画像ファイルの指定に誤りがあります。"); } return L00; } } /* ■ クラスの外でちょっと一言 ■ Swingで画像表示というと、JPanelに直接描画するのを思い浮かべるかもしれま せんが、JLabelにHTMLで表示するというアプローチもあります。今回は、画像と 文字のみで構成されるグラフですので、HTMLのtableタグを利用して、JLabelで レイアウトすることにしました。 棒グラフの元画像は、どの色も幅8ドット。それをimgタグのwidth属性に値を設 定することで、横の長さを変えています。Webアプリケーションでよく使う手法 ですね。 imgタグにローカルのファイル名を指定する場合は、URLに変換する必要がありま す。<img src="image/fish00.gif">のように相対パスで指定しても表示されませ んので注意してください。相対パス→URLの変換は、java.io.Fileオブジェクト を作って、toURLメソッドを呼べばOK。 JLabelに設定するHTMLタグの連結には、StringBufferを使ってます。Stringを+ で連結するのに比べ、メモリに無駄がありません。「文字を頻繁に連結するとき はStringBuffer」と覚えておいてください。 */