1

装飾されていない透明なJFrameを作成し、その上にグラフィックをペイントしようとしています。JFrameを拡張し、undecoratedをtrueに設定し、ペイントをオーバーライドすると、透明なJFrameを作成できます。このような:

public class MainFrame extends JFrame {
public static void main(String[] args) throws Exception {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                MainFrame frame = new MainFrame();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}


public MainFrame() {
    setTitle("ASDF");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setUndecorated(true);
    setBounds(0, 0, 200, 200);      
}

public void paint(Graphics g){
    g.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 20));
    g.drawString("ASDF", 100, 100);
}
}

問題は、その上に何かを描画しようとすると、別の再描画のために何が描画されているのかが明確にならないことです。この例のように、テキストは描画されたときにそこにあった背景を保持します。したがって、ウィンドウをフレームの後ろに移動すると、フレーム自体の背景が古いため、奇妙に見えます。AlphaComposite.Clearを試しましたが、背景が黒くなりました。私に何ができる?

4

1 に答える 1

0

JFrameを拡張し、undecoratedをtrueに設定し、ペイントをオーバーライドすると、透明なJFrameを作成できます。

私はそうは思わない。背景を気にせずにペイントするだけで、すぐに失われます。Javaで透明なウィンドウを作成する方法を知りたい場合は、Stackoverflowを使用してください:を検索して[java] transparent windowください。これはそのようなウィンドウを作成するのに役立つはずですが、これは非常に複雑なタスクです:透明なウィンドウ

于 2012-09-17T13:51:57.623 に答える