
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>
次のように表示されるはずです。

| トップヘ | 目次ヘ | 前ヘ | 次ヘ |
Copyright (C) 2003 System Five Japan (Mori). All Rights Reserved
Java およびそのほか Java を含む標章は、米国 Sun Microsystems, Inc.の商標です