2

残念ながら、2 つの画面では機能しない透明な JDialog を作成しました。他の画面にドラッグすると不透明になります。コードは以下のとおりです。実行して、ラベルを他の画面にドラッグするだけです。

public class TransparentFrame{

public static void main(String[] args) {
    JDialog dialog = createDialog();
    SwingUtilities.invokeLater(() -> dialog.setVisible(true));
}


private static JDialog createDialog() {
    JDialog dialog = new JDialog();

    JLabel label = new JLabel("drag me to the other screen");
    label.addMouseMotionListener(new MouseMotionAdapter() {
        @Override
        public void mouseDragged(MouseEvent e) {
            SwingUtilities.invokeLater(() -> dialog.setLocation(e.getLocationOnScreen()));
        }
    });
    label.setOpaque(false);
    dialog.getContentPane().add(label);

    dialog.setUndecorated(true);
    dialog.getRootPane().setWindowDecorationStyle(JRootPane.NONE);

    dialog.setBackground(new Color(0, 0, 0, 0));
    dialog.getContentPane().setBackground(new Color(0, 0, 0, 0));

    dialog.pack();
    return dialog;
}

}

誰もそれを修正する方法を知っていますか?

環境: Ubuntu 14.04、Cinnamon、Java 1.8.0_74-b02

4

2 に答える 2

0

透明な JDialog を作成しました

この場合の問題かどうかはわかりませんが、Swing とそのコンポーネントの間の描画契約を破っているため、Swing と透過色がうまくいきません。詳細については、透明度のある背景をご覧ください。

透明な色で遊ぶ代わりに、次を使用してみてください。

dialog.setOpacity(...);
于 2016-03-21T15:20:28.127 に答える
0

これが問題の原因である場合とそうでない場合がありますが、透明なウィンドウの影を削除することをお勧めします。これらの行がないと、私のプログラム (Mac 上) は、中断されたときにウィンドウ表示に影を「焼き付け」ます。これは 1 台のモニター (MacBook の画面) のセットアップですが、デスクトップを切り替えると、ウィンドウ ディスプレイに影が「焼き付き」ます。

JRootPane root = frame.getRootPane(); root.putClientProperty("Window.shadow", Boolean.FALSE);

于 2016-03-21T15:22:33.690 に答える