Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaでJPanelのpaintComponent()メソッドを実装する方法をわかりやすく解説

JPanelはJavaにおける軽量コンテナであり、それ自体は不可視(インビジブル)なコンポーネントとして扱われます。デフォルトのレイアウトにはFlowLayoutが採用されています。JPanelを生成した後は、Containerクラスから継承されたadd()メソッドを呼び出すことで、ボタンやラベルなどの他のコンポーネントをJPanelオブジェクトに自由に追加できます。

paintComponent()メソッドとは

このメソッドは、単なる背景色の描画にとどまらず、JPanel上に独自の図形や画像などを描画したい場合に必要となります。paintComponent()メソッドはすでにJPanelクラス内に定義されているため、独自の描画処理を追加する際にはsuper宣言を利用します。また、このメソッドは引数としてGraphicsオブジェクトを受け取ります。

注意点として、パネルの背景を正しく描画する通常のpaintComponent()処理を表すsuper.paintComponent()は、必ずメソッドの最初の行で呼び出す必要があります。これを怠ると、描画内容が正しく表示されないなどの不具合が発生する可能性があります。

構文

protected void paintComponent(Graphics g)

実装例:スマイリーアプリ

以下は、paintComponent()をオーバーライドして、黄色い顔に目と口を描くシンプルな「スマイリーアプリ」を作成する例です。

import java.awt.*;
import javax.swing.*;

public class SmileyApp extends JPanel {
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.YELLOW);
        g.fillOval(10, 10, 200, 200); // 顔の輪郭を描画
        // 目を描画
        g.setColor(Color.BLACK);
        g.fillOval(55, 65, 30, 30);
        g.fillOval(135, 65, 30, 30);
        // 口を描画
        g.fillOval(50, 110, 120, 60);
        // 笑顔を表現
        g.setColor(Color.YELLOW);
        g.fillRect(50, 110, 120, 30);
        g.fillOval(50, 120, 120, 40);
    }

    public static void main(String[] args) {
        SmileyApp smiley = new SmileyApp();
        JFrame app = new JFrame("Smiley App");
        app.add(smiley, BorderLayout.CENTER);
        app.setSize(300, 300);
        app.setLocationRelativeTo(null);
        app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        app.setVisible(true);
    }
}

コードのポイント

  • @Overrideアノテーションを付けることで、親クラスのメソッドを意図的にオーバーライドしていることを明示できます。
  • g.setColor()で描画色を切り替え、g.fillOval()g.fillRect()で楕円や矩形を塗りつぶして図形を描いています。
  • JFrameにJPanelを配置し、ウィンドウサイズや閉じる動作を設定してから可視化することで、アプリとして完成します。

実行結果

プログラムを実行すると、300×300ピクセルのウィンドウ中央に、黄色い丸い顔・黒い目・笑顔の口が描かれたスマイリーが表示されます。

  1. JavaのBorderFactoryを使ってさまざまなボーダー(境界線)を実装する方法

    BorderFactoryは、Javaでさまざまな種類のボーダー(境界線)を生成するためのファクトリクラスです。このクラスを利用することで、Swingコンポーネントの外枠を簡単かつ柔軟にカスタマイズできます。ボーダーの種類BevelBorder:浮き上がった(RAISED)または沈み込んだ(LOWERED)斜めのエッジを描画します。ボタンなどに立体感を持たせたい場合に有効です。EmptyBorder:何も描画しませんが、余白としてスペースを確保します。コンポーネント間の間隔調整に役立ちます。EtchedBorder:LOWERED(沈み込み)タイプはくぼんだ矩形のような外観になり、RAISED

  2. JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説

    JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー