0
私はJFrame
を持っています。常に透明で透明ですので、画面オーバーレイとして使用できます。それは動作しますが、問題は次のとおりです。カーソルをどこかに置くと、カーソルが常に「上」になるので、実際にフォーカスしているウィンドウをクリックできません。これを修正する方法はありますか? スイング画面のオーバーレイがマウスの上に乗っているときに干渉します
frame.setOpacity(0.0f);
が
How to Create Translucent and Shaped Windows上のSwingチュートリアルからセクションを読む:
public class ExternalOverlay extends JFrame implements ActionListener {
public Timer timer;
private float[] res;
private final int FRAMERATE = 60;
public ExternalOverlay() {
this.setUndecorated(true);
this.setBackground(new Color(0, 0, 0, 0));
float[] res = this.getRes();
this.setBounds(0, 0, (int)res[0], (int)res[1]);
this.setAlwaysOnTop(true);
this.getContentPane().setLayout(new java.awt.FlowLayout());
this.setVisible(true);
this.setAutoRequestFocus(false);
this.setFocusableWindowState(false);
this.timer = new Timer(1000/FRAMERATE, this);
timer.start();
}
private float[] getRes() {
if (this.res != null) return res;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
double width = screenSize.getWidth();
double height = screenSize.getHeight();
return new float[] {(float) width, (float) height};
}
@Override
public void actionPerformed(ActionEvent e) {
this.repaint();
}
public void draw(Graphics g) {
}
@Override
public void paint(Graphics g) {
// draw
}
}
私はそれが透明な背景を持っているはずだったはずです – Babbaj
@Babbaj、透明な背景とは何ですか?あなたはフレームが常にオーバートップしているので、オーバーレイとして使うことができます。それはフレームが他のウィンドウの上にあるので、デスクトップ上の他のウィンドウを見ることができます。カスタムペイントを行う場合は、JPanelのpaintComponent()メソッドをオーバーライドしてから、フレームをフレームに追加する必要があります。あなたの質問が明確でないため、あなたの問題を示す適切な[mcve]を投稿してください。 – camickr