本連載は、「プログラマーの常識をJavaで身に付ける」ことを目標としています。Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきたい、と考えています。最初は、色・フォント・マウスポインタ(カーソル)についてです。
前回はプログラマーの常識を学ぶうえでの注意点や本連載を読み進むうえでの前提条件を提示するとともに、今回のためのシンプルSwingアプリケーションを作成しました。まだSwingアプリを作成していない読者は前回の「動作確認のためのシンプルSwingアプリを準備」を参照してください。
まずは、「色」について取り上げていきましょう。私たちの身の回りにはさまざまな色があります。そして、私たちが扱うコンピュータもCRT/液晶ディスプレイやプリンタなどで色を扱います。コンピュータを使ってさまざまな色を表現するためには、プログラムが色を扱えるようになっている必要があります。
私たちの身近なところにあるCRT/液晶ディスプレイやテレビなどは、複数の色光を混ぜ合わせて色を表現しています。「加法混色」と呼ばれる方法です。黄みの赤(R)、緑(G)、紫みの青(B)の色の光を使い、これらを組み合わせることによって多くの色を表現しています。これを「色光の三原色」と呼びます。
コンピュータに付いている最もポピュラーなデバイスがCRT/液晶ディスプレイであること、あるいはコンピュータ発達の歴史の経緯から、プログラミングやAPIはこの色光の三原色(RGB)を基にした仕組みが利用できるようになっている場合がほとんどです。
一方で、シアン(緑みの青 C)、マゼンタ(赤紫 M)、イエロー(黄 Y)の3種類を使って混ぜ合わせることによって、さまざまな色を表現する方法があります。これを「減法混色」と呼びます。私たちの身近にある普及価格帯のプリンタは、シアン(緑みの青 C)、マゼンタ(赤紫 M)、イエロー(黄 Y)の3種類のインキ(および黒色のインキ K)の組み合わせを利用するものが多いです。
ここまでが色に関する基本的な説明なのですが、実際には、私たちの身近にある多くのCRT/液晶ディスプレイ/プリンタでは、「並置加法混色」という、色を細かく並べることによって色を混ぜる方法が採用されています。これは、さまざまな技術的な都合(例えば、インキを混ぜる方法がうまくいかないなどの都合)により、細かく並べる方法で色を再現する方がうまくいくという理由によるものです。
目の錯覚で色が混ざって、新しい色が見えるのですね。詳しくは参考文献をご覧ください。
私たちが身近に見かけるRGBの1つとして、OSの色選択画面が挙げられます。例えばWindows XPでは、「画面のプロパティ」から進んでいき、デスクトップの色を自分で追加する画面を開けます。
Windows XPの「色の設定」ダイアログでは、RGB (黄みの赤(R)、緑(G)、紫みの青(B)) それぞれの値が0から255までの数値によって表現されていて、この画面では、それら数値を入力できます。この画面から色を選択して進んでいくと、デスクトップの背景色を変えるなどの操作ができます。
では、JavaのAPIを用いて色を設定して、同様のことを実現してみましょう。Java言語で、基本的に色をつかさどるクラスは「java.awt.Color」となります。先ほど説明したように、色を扱うAPIはRGB値を利用して色を設定できるようになっています。
ここでは、前述のシンプルSwingアプリケーションをベースとして、ウィンドウ上に丸を描画するアプリで背景色を変更します。下記のソースコードを実行してください。
SimpleColorSample.java | |
|
見てほしいのは(1)の行です。JPanelクラスには、setBackgroundというメソッドがあります。このメソッドにColorインスタンスを与えることにより、背景色を変更できます。Java.awt.Colorのコンストラクタには、RGBのそれぞれの値を0から255までの値として与えるものがあります。ここで指定した値に従い、背景色が変化することを確認してください。
また、コンストラクタに与える値を変えてみると、確かに背景色が変化します。(1)の行を下記のように書き換えて、実行してください。
setBackground(new Color(128, 128, 255)); |
さらにほかにも、Windowsの「色の設定」ダイアログを併せて利用して、好みの色を表すRGB数値を見つけ、プログラムのソースコードを変更してから動作させてみましょう。
Copyright © ITmedia, Inc. All Rights Reserved.