デスクトップの常識プログラマーの常識をJavaで身につける(2)(1/3 ページ)

本連載は、「プログラマーの常識をJavaで身に付ける」ことを目標としています。Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきたい、と考えています。最初は、色・フォント・マウスポインタ(カーソル)についてです。

» 2007年02月10日 00時00分 公開
[伊賀敏樹NTTデータ ビジネスブレインズ]

編集部注

Java言語の基礎を学びたい読者は、連載「【改訂版】Eclipseではじめるプログラミング」をご参照ください。


 前回はプログラマーの常識を学ぶうえでの注意点や本連載を読み進むうえでの前提条件を提示するとともに、今回のためのシンプルSwingアプリケーションを作成しました。まだSwingアプリを作成していない読者は前回の「動作確認のためのシンプルSwingアプリを準備」を参照してください。

「色」は数値で表せる

コンピュータでの色の表現

 まずは、「」について取り上げていきましょう。私たちの身の回りにはさまざまな色があります。そして、私たちが扱うコンピュータもCRT/液晶ディスプレイプリンタなどで色を扱います。コンピュータを使ってさまざまな色を表現するためには、プログラムが色を扱えるようになっている必要があります。

編集部注CRTディスプレイについて詳しく知りたい読者は、@IT Insider's Computer Dictionaryの[CRTディスプレイ]を、プリンタについて詳しく知りたい読者は、[プリンタ]をご参照ください。

色光の三原色(RGB)

 私たちの身近なところにあるCRT/液晶ディスプレイやテレビなどは、複数の色光を混ぜ合わせて色を表現しています。「加法混色」と呼ばれる方法です。黄みの赤(R)、緑(G)、紫みの青(B)の色の光を使い、これらを組み合わせることによって多くの色を表現しています。これを「色光の三原色」と呼びます。

 コンピュータに付いている最もポピュラーなデバイスがCRT/液晶ディスプレイであること、あるいはコンピュータ発達の歴史の経緯から、プログラミングやAPIはこの色光の三原色(RGB)を基にした仕組みが利用できるようになっている場合がほとんどです。

図1 加法混色 図1 加法混色(この図は書籍「『デジタル色彩マニュアル』 クレオ発行、日本色彩研究所」に出てくる図を参考にしています)

減法混色の三原色(CMY)

 一方で、シアン(緑みの青 C)、マゼンタ(赤紫 M)、イエロー(黄 Y)の3種類を使って混ぜ合わせることによって、さまざまな色を表現する方法があります。これを「減法混色」と呼びます。私たちの身近にある普及価格帯のプリンタは、シアン(緑みの青 C)、マゼンタ(赤紫 M)、イエロー(黄 Y)の3種類のインキ(および黒色のインキ K)の組み合わせを利用するものが多いです。

編集部注CMYについてさらに詳しく知りたい読者は、@IT Insider's Computer Dictionaryの[CMYK (Cyan Magenta Yellow blacK)]をご参照ください。

並置加法混色

 ここまでが色に関する基本的な説明なのですが、実際には、私たちの身近にある多くのCRT/液晶ディスプレイ/プリンタでは、「並置加法混色」という、色を細かく並べることによって色を混ぜる方法が採用されています。これは、さまざまな技術的な都合(例えば、インキを混ぜる方法がうまくいかないなどの都合)により、細かく並べる方法で色を再現する方がうまくいくという理由によるものです。

図2 並置加法混色 図2 並置加法混色(この図は書籍「『デジタル色彩マニュアル』 クレオ発行、日本色彩研究所」に出てくる図を参考にしています)

 目の錯覚で色が混ざって、新しい色が見えるのですね。詳しくは参考文献をご覧ください。

私たちの身近によく見かけるRGB

 私たちが身近に見かけるRGBの1つとして、OSの色選択画面が挙げられます。例えばWindows XPでは、「画面のプロパティ」から進んでいき、デスクトップの色を自分で追加する画面を開けます。

図3 「画面のプロパティ」 図3 「画面のプロパティ」
図4 「色の設定」ダイアログ 図4 「色の設定」ダイアログ

 Windows XPの「色の設定」ダイアログでは、RGB (黄みの赤(R)、緑(G)、紫みの青(B)) それぞれの値が0から255までの数値によって表現されていて、この画面では、それら数値を入力できます。この画面から色を選択して進んでいくと、デスクトップの背景色を変えるなどの操作ができます。

図4 「色の設定」ダイアログ 図5 「画面のプロパティ」(色の変更後)

色を扱うAPIを利用する [java.awt.Color]

 では、JavaのAPIを用いて色を設定して、同様のことを実現してみましょう。Java言語で、基本的に色をつかさどるクラスは「java.awt.Color」となります。先ほど説明したように、色を扱うAPIはRGB値を利用して色を設定できるようになっています。

 ここでは、前述のシンプルSwingアプリケーションをベースとして、ウィンドウ上に丸を描画するアプリで背景色を変更します。下記のソースコードを実行してください。

SimpleColorSample.java
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class SimpleColorSample extends JPanel {
    public SimpleColorSample() {
        // 背景色をRGBによって指定します
        setBackground(new Color(255, 255, 128)); // (1)
    }
    public void paintComponent(final Graphics argGraphics) {
        super.paintComponent(argGraphics);
        // 赤色で画面の大きさいっぱいに円を描画します
        argGraphics.setColor(Color.red);
        final Rectangle rect = getBounds();
        argGraphics.drawOval(0, 0, rect.width, rect.height);
    }
    private static void createAndShowGUI() {
        // JFrameを作成して自分自身を張り付け、これを表示します
        final JFrame frame
            = new JFrame("背景色をRGB指定で変更するサンプル");
        frame.getContentPane().add(new SimpleColorSample());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setSize(400, 400);
        frame.setVisible(true);
    }
    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }
}

 見てほしいのは(1)の行です。JPanelクラスには、setBackgroundというメソッドがあります。このメソッドにColorインスタンスを与えることにより、背景色を変更できます。Java.awt.Colorのコンストラクタには、RGBのそれぞれの値を0から255までの値として与えるものがあります。ここで指定した値に従い、背景色が変化することを確認してください。

図6 背景色をRGB指定で変更するサンプル(黄色) 図6 背景色をRGB指定で変更するサンプル(黄色)

  また、コンストラクタに与える値を変えてみると、確かに背景色が変化します。(1)の行を下記のように書き換えて、実行してください。

        setBackground(new Color(128, 128, 255));

図7 背景色をRGB指定で変更するサンプル(変更後) 図7 背景色をRGB指定で変更するサンプル(変更後)

 さらにほかにも、Windowsの「色の設定」ダイアログを併せて利用して、好みの色を表すRGB数値を見つけ、プログラムのソースコードを変更してから動作させてみましょう。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。