連載
» 2007年02月10日 00時00分 公開

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

[伊賀敏樹,NTTデータ ビジネスブレインズ]
前のページへ 1|2|3       

「マウスポインタ(マウスカーソル)」はOSによって変わる

 最後に、マウスポインタマウスカーソル)について見てみましょう。私たちがGUI付きのOSを使っている場合には、マウスポインタは大変よく見かける仕組みであることでしょう。目が行く先、そこにまさにマウスポインタが存在することが多いです。

 マウスポインタは歴史的な経緯などにより、「マウスカーソル」などと呼ばれる場合があります。これから紹介するAPIも「java.awt.Cursor」という名称になっています。

編集部注マウスポインタについて詳しく知りたい読者は、@IT Insider's Computer Dictionaryの[マウスポインタ]を、マウスカーソルについて詳しく知りたい読者は、[マウスカーソル]ご参照ください。

Windows XPにおけるマウスポインタの種類

 まず、Windows XPでの標準のマウスポインタ設定がどのようになっているのかを見ていきましょう。コントロールパネルから「マウス」を選択して「ポインタ」タブを選択すると、下の図17のような画面が開きます。

図17 「マウスのプロパティ」 図17 「マウスのプロパティ」

 Windows XPでは、プログラムの状態とマウスポインタの形状とが図17のように関連付けされています。なるほど、私たちがウィンドウを操作していると、マウス形状が変化しますが、その形状はWindows XPでは、「マウスのプロパティ」ダイアログなどで設定できるのですね。

マウスポインタの形状を変更するAPI [java.awt.Cursor]

 次に、マウスポインタの形状を変更するプログラムを書いて、プログラム上で指定した値がどのように作用するのかを確認してみましょう。ここでは、前述のシンプルSwingアプリケーションをベースとして、ウィンドウ上にマウスポインタが来ると「待ち状態」の形状に変わるようにプログラムを記述します。

 Java 2 Platform SE 5.0の「java.awt.Cursor」ドキュメントを基に、指定可能なマウスポインタの定数値とWindows XPのデフォルト時のマウスポインタ形状の対応を下ので示します。

表 マウスポインタの定数値とWindows XPのデフォルト時の形状
定数値 説明 Windows XPでの形状(デフォルト時)
CROSSHAIR_CURSOR 十字のカーソル形です
DEFAULT_CURSOR デフォルトのカーソル形です(カーソルが定義されていない場合に設定される)
E_RESIZE_CURSOR 東方向サイズ変更のカーソル形です
HAND_CURSOR 手の形状のカーソル形です
MOVE_CURSOR 移動カーソル形です
N_RESIZE_CURSOR 北方向サイズ変更のカーソル形です
NE_RESIZE_CURSOR 北東方向サイズ変更のカーソル形です
NW_RESIZE_CURSOR 北西方向サイズ変更のカーソル形です
S_RESIZE_CURSOR 南方向サイズ変更のカーソル形です
SE_RESIZE_CURSOR 南東方向サイズ変更のカーソル形です
SW_RESIZE_CURSOR 南西方向サイズ変更のカーソル形です
TEXT_CURSOR テキストのカーソル形です
W_RESIZE_CURSOR 西方向サイズ変更のカーソル形です
WAIT_CURSOR 待ち状態のカーソル形です

 これら定数値を用いると、システムとして組み込まれているマウスポインタの形状をすぐに利用できます。ウィンドウ上でマウスポインタが変更される様子を確認しましょう。下記のソースコードを実行してください。

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

public class SimpleCursorSample extends JPanel {

     public SimpleCursorSample() {
        // 背景色を白色にします
        setBackground(Color.white);
        // カーソルを変更
        setCursor(Cursor.getPredefinedCursor(
            Cursor.WAIT_CURSOR)); // (5)

    }
    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("マウスポインタ形状を変更するサンプル");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new SimpleCursorSample());
        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();
            }
        });
    }
}

 Swingアプリケーション上をマウスポインタが通過すると、マウスポインタの形状がプログラムで指定したとおりの形状になることを確認してください。

図18 マウスポインタの形状を変更するサンプル 図18 マウスポインタの形状を変更するサンプル

 行(5)に注目してください。JPanelのsetCursorにマウスポインタのオブジェクトを渡すことにより、マウスポインタの形状を変更できます。

 ここでは、Cursor.getPredefinedCursorメソッドを用いて、すでに定義済みのマウスポインタを取り出しています。このメソッドに与える定数を変更することにより、「待ち状態」以外のマウスポインタ形状へと変化させることができます。

ワンポイント

この例では、マウスポインタを「待ち状態」の形状に変更していますが、これは形状が変更されているにすぎないことに注意する必要があります。一般的なアプリケーションの多くでは、マウスポインタが「待ち状態」の形状になっているときには、「マウスクリック」などのイベントの多くが無効化されているかと思います。しかし、この例では、マウスポインタの形状が単に「待ち状態」になっているにすぎず、イベントは無効化されていません。ご注意を。


次回は「数」の常識について

 今回はプログラマーに身近なデスクトップの常識と題して、「色」「フォント」「カーソル」を紹介しました。次回の記事では、[java.lang.Math]クラスなどを使って、に関する常識を取り上げる予定です。それでは、次回をお楽しみに。

参考文献
▼『デジタル色彩マニュアル』 クレオ発行、日本色彩研究所

筆者紹介

blanco Framework(コミッタ)

伊賀 敏樹(いが としき)
ハンドル:いがぴょん

1968年生まれ。現在、NTTデータ ビジネスブレインズ 第一SI事業部 ソリューショングループ所属。システム開発の技術支援などに従事する。仕事におけるJava言語とのかかわりは1998年から。 現在 blanco Frameworkというオープンソースによるソースコード自動生成タイプの開発フレームワーク提供に取り組んでいる。 趣味はヴァイオリン演奏。アマチュアオーケストラで演奏することもある。

ホームページ
いがぴょんの日記ウェブページv2(1996年から続けているWeb日記)

主な著書
やさしく学ぶ基礎からのJDBC
Javaプログラミング[アプリケーション編]ステップアップラーニング



前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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