Javaで透過的なJDialogを実装する方法|AlphaContainerを使ったサンプルコード付き
JDialogとは
JDialogはDialogクラスのサブクラスであり、ウィンドウの右上隅に最小化ボタンや最大化ボタンを持ちません。ダイアログには大きく分けてモーダル(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());
}
}
実行結果

コードのポイント解説
- setUndecorated(true):タイトルバーや枠線などのウィンドウ装飾を削除し、自由なデザインのダイアログにできます。
- setBackground(new Color(0, 0, 0, 0)):アルファ値0の色を指定して、ウィンドウ自体を完全に透明にします。
- AlphaContainerクラス:
paintComponent()をオーバーライドし、アルファ値を持つ半透明の背景色を描画するラッパーコンポーネントです。パネル全体をnew Color(0, 0, 0, 64)のような半透明色で塗ることで、背後の画面が透けて見えます。 - setOpaque(false):ルートペインやスライダーなど、各コンポーネントの不透明描画を無効化し、透過効果を正しく反映させます。
- setContentAreaFilled(false):ボタンの塗りつぶし背景を解除し、半透明のデザインになじませています。
このように、Swingのコンポーネントを半透明色と組み合わせることで、モダンな見た目のカスタムダイアログを簡単に作成できます。ぜひ実際にコードを動かして、透過度(アルファ値)を変えながら見た目の変化を試してみてください。
-
JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー
-
JavaのJWindowを使ってスプラッシュ画面を実装する方法
JWindowは、デスクトップ上の任意の位置に表示できるコンテナです。JFrameと異なり、タイトルバーやウィンドウ管理ボタンなどの装飾要素を持ちません。JWindowは、唯一の子クラスとしてJRootPaneを含んでいます。そのcontentPaneが、JWindowに追加される子コンポーネントの親となります。JFrameと同様に、JWindowもトップレベルコンテナの一つであり、「装飾のない(undecorated)JFrame」と考えることができます。タイトルバーやウィンドウメニューといった機能は備えていません。この特性を活かすと、JWindowはスプラッシュ画面として利用できます。アプ