よその日の丸

Since 2003.04.15  

汎用日の丸プログラム

引き続いて、日の丸と同じ意匠による他の国の旗を取り上げます。
世界の国旗の中には、日の丸と同じように、地の色1色に日章をかたどった旗があります。バングラディシュとパラオの旗は、色や、デザインは違っているのですが、日章旗です。
日の丸と比較すると、バングラディシュの旗は、日章が大きく(暑い国だから?)、パラオの旗は、日章が棹側に大きく寄っています。

参照 外務省 > 世界の国旗
RICOH 環境のページ バングラディシュ

今回は、これらの旗もパラメータ渡しによって描けるようなプログラムを作ります。早速、分析に入ります
パラメータとして渡す必要のあるデータは、次の4つです。

これに追加で、日章の位置のY座標も加えておきます。
どのような値として、パラメータを渡すのかという問題ですが、
日章の色は、前回の地の色と同様です。
新しく考える必要があるのは、日章の大きさ、位置についてですが、これには、2通りの指定が可能です。

プログラムは、絶対指定のほうがシンプルになりますが、相対指定のほうは、旗全体の大きさが変わっても変更不要ですから、色指定を含めて、「謙信の旗のパラメータセット」「パラオの旗のパラメータセット」とまとめて扱えますので、ユーザ側は便利です。
位置については、円の中心、外接矩形の左上座標の2通りの指定が可能です。
ここでは、位置は円の中心、指定方法は相対指定とします。
また、数値は10進数で表記したものを
parseInt(String s) 文字列の引数を符号付き 10 進数の整数型として構文解析します。
に渡すこととします。

コーディングから実行まで

設計は以上で終わりなので、プログラム作業に入ります。
/net/sys5jp/basic/Sunflag.javaを同じフォルダに Sunflagx.java という名前でコピーして、コードを書き加えることとします。
同じく、/net/sys5jp/basic/Sunflag.htmlを同じフォルダに Sunflagx.html という名前でコピーしておきます。

1 /*<applet code="net/sys5jp/basic/Sunflagx.class"
2     codebase="../../../"
3     width=400 height=280>
4 </applet>*/
5
6 package net.sys5jp.basic;
7
8 import java.applet.*;
9 import java.awt.*;
10 import java.lang.*;
11
12 public class Sunflagx extends Applet {
13         Dimension dim;
14         Color suncolor = new Color(255, 0, 0);;
15         Color backcolor = new Color(255, 255, 255);
16         int pdist = 42;
17         int px = 49;
18         int py = 50;

19
20     private int getIntParameter(String param) {
21         String value = getParameter(param);
22         try { return Integer.parseInt(value); }
23         catch(Exception e) { return 0; }
24     }

25
26     private Color getColorParameter(String param) {
27         String value = getParameter(param);
28         try { return new Color(Integer.parseInt(value, 16)); }
29         catch(Exception e) { return null; }
30     }

31
32     public void paint(Graphics g) {
33         int x, y, dist;
34
35         dim = this.getSize();
36         dist = dim.width * pdist / 100;
37         x = dim.width * px / 100 - dist / 2;
38         y = dim.height * py / 100 - dist / 2;

39         g.setColor(suncolor);
40         g.fillOval(x, y, dist, dist);
41     }
42
43     public void init() {
44         Color color;
45         if((color = getColorParameter("backcolor")) != null) {
46             backcolor = color;
47         }
48         if((color = getColorParameter("suncolor")) != null) {
49             suncolor = color;
50         }
51         int value;
52         value = getIntParameter("dist");
53         if (value > 0 && value < 100) {
54             pdist = value;
55         }
56         value = getIntParameter("x");
57         if (value > 0 && value < 100) {
58             px = value;
59         }
60         value = getIntParameter("y");
61         if (value > 0 && value < 100) {
62             py = value;
63         }

64         this.setBackground(backcolor);
65     }
66 }

だんだん行数が増えてきています。書き終えたら、プログラムをコンパイルしてください。
さらに、Sunflagx.html を次のように書き換えて、開いてみましょう。

<html>
<head>
<style>
<!--
body {background-color:rgb(192,192,192)}
.center {text-align:center}
td {padding:5px 10px}
-->
</style>
</head>
<body>
<table class="center" border="2">
<tr> <td>
<applet code="net/sys5jp/basic/Sunflag.class"
    codebase="../../../"
    width=150 height=105>
</applet>
</td> <td>
<applet code="net/sys5jp/basic/Sunflag.class"
    codebase="../../../"
    width=150 height=105>
        <param name="backcolor" value="00007f">
</applet>
</td> <td>
<applet code="net/sys5jp/basic/Sunflag.class"
    codebase="../../../"
    width=150 height=105>
        <param name="backcolor" value="004100">
        <param name="suncolor" value="bd0000">
        <param name="dist" value="52">
</applet>
</td> <td>
<applet code="net/sys5jp/basic/Sunflag.class"
    codebase="../../../"
    width=150 height=105>
        <param name="backcolor" value="0079e7">
        <param name="suncolor" value="ffff00">
        <param name="x" value="40">
</applet>
</td></tr>
<tr>
<td>日の丸</td><td>謙信の旗</td><td>バングラディシュ</td><td>パラオ</td>
</tr>
</table>
</body>
</html>

次のように表示されるはずです。

トップヘ 目次ヘ 前ヘ 次ヘ