装飾されていない透明な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を試しましたが、背景が黒くなりました。私に何ができる?