在绘制时,摆动屏幕叠加干扰鼠标

时间:2017-12-15 21:09:33

标签: java swing

我有一个JFrame透明,总是在顶部并且无法对焦,所以我可以将它用作屏幕叠加层。它的工作原理,但问题是:当我把光标放在某个地方时,我画了一些东西,我的光标总是“在'上面',所以我无法点击实际上对焦的窗口。有什么方法可以解决这个问题吗?

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
    }
}

1 个答案:

答案 0 :(得分:0)

  

我有一个透明的JFrame

您应该使用:

frame.setOpacity(0.0f);

阅读How to Create Translucent and Shaped Windows上的Swing教程中的部分。下载TranslucentWindowDemo代码以获得一个好的起点。