質問: crtButton.createButton(8); for(int i=0;i
回答: 実は昔こうしたものを作ろうとして挫折した思い出があります・・・ 今回「swing 背景 透明」などで改めて調べてみるとJava7からサポートされたなんていう情報が見つかったのでやってみました。その方法をご紹介してみます。 1. デコレーションを付けないウィンドウにする 次の質問を拝見するとこれについては解決したように思いますが・・・ JFrameのコンストラクターにて次のようにするとできるようですね。 setUndecorated(true); getRootPane().setWindowDecorationStyle(JRootPane.NONE); 2. ウィンドウの背景を透明にする これも次の質問を拝見すると解決されたようにも見えますが・・・ 同様にJFrameのコンストラクターにて次のようにすると可能のようです。 // 前提:以下でsupportedがtrueになる環境が必要。Windows10などは大丈夫のようですね。 GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); GraphicsDevice gd = ge.getDefaultScreenDevice(); boolean supported = gd.isWindowTranslucencySupported(WindowTranslucency.PERPIXEL_TRANSLUCENT); // JFrameの背景色を透明に設定。前述の「デコレーションを付けない」が前提のようですね。 setBackground(new Color(0, 0, 0, 0)); 3. JPanel内の部品位置をアニメーションで移動すると移動前の描画がウィンドウ上に残る問題 これはJFrameのcontentPaneに設定されているJPanelに対して次のようにすると移動前の描画残骸が残らなくなります。 JPanel panel = (JPanel)myFrame.getContentPane(); panel.setOpaque(false);// 透明コンポーネントであることを明示する なお、画面構成は以下のような単純なものであると仮定しています。 ``` JFrame + JPanel(contentPane) <- このJPanelに対してsetOpaque(false)する。 +- ボタンなど ```