Swing/FadingOutWindow の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/FadingOutWindow へ行く。
- Swing/FadingOutWindow の差分を削除
--- category: swing folder: FadingOutWindow title: JWindowを透明効果アニメーション付きでフェードアウトする tags: [JWindow, Timer, Animation] author: aterai pubdate: 2025-05-19T01:29:28+09:00 description: JWindowの透明度をTimerを使用して変更し、フェードアウトで非表示化するよう設定します。 image: https://drive.google.com/uc?id=1gRpRc-O2DPW5PKmTF1Ric4TObdc4V0u5 --- * Summary [#summary] `JWindow`の透明度をTimerを使用して変更し、フェードアウトで非表示化するよう設定します。 `JWindow`の透明度を`Timer`を使用して変更し、フェードアウトで非表示化するよう設定します。 #download(https://drive.google.com/uc?id=1gRpRc-O2DPW5PKmTF1Ric4TObdc4V0u5) * Source Code Examples [#sourcecode] #code(link){{ JWindow window = new JWindow(); GraphicsConfiguration gc = window.getGraphicsConfiguration(); if (gc != null && gc.isTranslucencyCapable()) { window.setBackground(new Color(0x0, true)); } AtomicInteger alpha = new AtomicInteger(100); Timer animator = new Timer(50, null); animator.addActionListener(e -> { int a = alpha.addAndGet(-10); if (a < 0) { window.dispose(); animator.stop(); log.append("JWindow.dispose()\n"); } else { float opacity = a / 100f; window.setOpacity(opacity); log.append(String.format("JWindow.setOpacity(%f)%n", opacity)); } }); Shape shape = new RoundRectangle2D.Float(0f, 0f, 240f, 64f, 32f, 32f); window.getContentPane().add(makePanel(shape, animator)); window.pack(); window.setLocationRelativeTo(c.getRootPane()); window.setVisible(true); }} * Explanation [#explanation] - `JWindow`の背景色に`Window#setBackground(...)`で`new Color(0x0, true)`を設定して透明化 -- `JWindow#getContentPane()`で取得したコンテンツペインに半透明の図形を描画する`JPanel`を追加 -- `JPanel`には背景のみ透明なアイコンと親`JWindow`を閉じる`JButton`を追加 - `JButton`がクリックされたら`Timer`を起動して`JWindow#setOpacity(float)`でウィンドウの不透明性を設定 -- このウィンドウの不透明性設定はウィンドウ背景色のアルファ成分とは異なり子コンポーネントを含めて適用される -- [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/Window.html#setOpacity-float- Window#setOpacity(float) (Java Platform SE 8)] * Reference [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/Window.html#setOpacity-float- Window#setOpacity(float) (Java Platform SE 8)] - [[JWindowを半透明の滑らかな図形で切り抜きする>Swing/TranslucentFrameShape]] * Comment [#comment] #comment #comment