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

Javaで透過的なJDialogを実装する方法|AlphaContainerを使ったサンプルコード付き

JDialogとは

JDialogDialogクラスのサブクラスであり、ウィンドウの右上隅に最小化ボタンや最大化ボタンを持ちません。ダイアログには大きく分けてモーダル(modal)モードレス(non-modal)の2種類があり、デフォルトのレイアウトマネージャーはBorderLayoutです。

本記事では、AlphaContainerクラスをカスタマイズし、paintComponent()メソッドをオーバーライドすることで、背景が透けて見える透過的なJDialogを実装する方法を解説します。

サンプルコード

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

public class TransparentDialog {
    public static void main(String[] args) {
        JDialog dialog = new JDialog();
        dialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        dialog.getRootPane().setOpaque(false);
        dialog.setUndecorated(true);
        dialog.setBackground(new Color(0, 0, 0, 0));

        JPanel panel = new JPanel(new BorderLayout());
        panel.setBackground(new Color(0, 0, 0, 64));
        dialog.add(new AlphaContainer(panel));

        JSlider slider = new JSlider();
        slider.setBackground(new Color(255, 0, 0, 32));
        panel.add(new AlphaContainer(slider), BorderLayout.NORTH);

        JButton button = new JButton("ラベルテキスト");
        button.setContentAreaFilled(false);
        panel.add(button, BorderLayout.SOUTH);

        dialog.setSize(400, 300);
        dialog.setLocationRelativeTo(null);
        dialog.setVisible(true);
    }
}

class AlphaContainer extends JComponent {
    private JComponent component;

    public AlphaContainer(JComponent component) {
        this.component = component;
        setLayout(new BorderLayout());
        setOpaque(false);
        component.setOpaque(false);
        add(component);
    }

    @Override
    public void paintComponent(Graphics g) {
        g.setColor(component.getBackground());
        g.fillRect(0, 0, getWidth(), getHeight());
    }
}

実行結果

Javaで透過的なJDialogを実装する方法|AlphaContainerを使ったサンプルコード付き

コードのポイント解説

  • setUndecorated(true):タイトルバーや枠線などのウィンドウ装飾を削除し、自由なデザインのダイアログにできます。
  • setBackground(new Color(0, 0, 0, 0)):アルファ値0の色を指定して、ウィンドウ自体を完全に透明にします。
  • AlphaContainerクラスpaintComponent()をオーバーライドし、アルファ値を持つ半透明の背景色を描画するラッパーコンポーネントです。パネル全体をnew Color(0, 0, 0, 64)のような半透明色で塗ることで、背後の画面が透けて見えます。
  • setOpaque(false):ルートペインやスライダーなど、各コンポーネントの不透明描画を無効化し、透過効果を正しく反映させます。
  • setContentAreaFilled(false):ボタンの塗りつぶし背景を解除し、半透明のデザインになじませています。

このように、Swingのコンポーネントを半透明色と組み合わせることで、モダンな見た目のカスタムダイアログを簡単に作成できます。ぜひ実際にコードを動かして、透過度(アルファ値)を変えながら見た目の変化を試してみてください。

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

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

  2. JavaのJWindowを使ってスプラッシュ画面を実装する方法

    JWindowは、デスクトップ上の任意の位置に表示できるコンテナです。JFrameと異なり、タイトルバーやウィンドウ管理ボタンなどの装飾要素を持ちません。JWindowは、唯一の子クラスとしてJRootPaneを含んでいます。そのcontentPaneが、JWindowに追加される子コンポーネントの親となります。JFrameと同様に、JWindowもトップレベルコンテナの一つであり、「装飾のない(undecorated)JFrame」と考えることができます。タイトルバーやウィンドウメニューといった機能は備えていません。この特性を活かすと、JWindowはスプラッシュ画面として利用できます。アプ