java - 刷新全透明JFrame

标签 java swing graphics transparent graphics2d

我想制作像窗口一样的东西 - 我有完全透明的 JFrame 和 JPanel 并在鼠标后移动窗口,但它不会刷新面板 - 很快窗口就会完全变成红色。这是我的代码:

public class Main {

    public static HolePanel panel = new HolePanel();
    public static JFrame frame = new JFrame();

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JFrame.setDefaultLookAndFeelDecorated(true);
        frame.setUndecorated(true);
        frame.setBackground(new Color(0, 0, 0, 0));
        frame.setAlwaysOnTop(true);
        frame.setBounds(0, 0, (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(), (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight());
        frame.setContentPane(panel);

        frame.addMouseMotionListener(new MouseList());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

}



public class HolePanel extends JPanel {

public double centerX = 200;
public double centerY = 200;
public double diameter = 300;

HolePanel(){
    setBackground(new Color(0, 0, 0, 0));
    repaint();
}

public void paintComponent(Graphics badG){
    super.paintComponent(badG);
    Graphics2D g = (Graphics2D)badG;

    g.setColor(Color.RED.darker().darker());

    Area a = new Area (new Rectangle2D.Double(0, 0, (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth(), (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()));
    a.subtract(new Area(new Ellipse2D.Double(centerX - diameter / 2, centerY - diameter / 2, diameter,diameter)));
    g.fill(a);
}

}


public class MouseList implements MouseMotionListener {

public void mouseDragged(MouseEvent e) {
}

@Override
public void mouseMoved(MouseEvent e) {
    Main.panel.centerX = e.getXOnScreen();
    Main.panel.centerY = e.getYOnScreen();  
    Main.panel.repaint();
}

}

你们能帮我一下吗?

最佳答案

查看Backgrounds With Transparency 。也许您可以使用 AlphaContainer 类。

基本上,当您想使用透明背景时,您必须使组件变得不透明并重写 PaintComponent() 方法来绘制背景。 AlphaContainer 会为您完成此操作。

关于java - 刷新全透明JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23640579/

相关文章:

java - 如何检测元素的变化

Java String Equals()方法和多维数组

Java - 这个简单的程序有什么问题?

java - repaint() 在 Swing 中不起作用

python - 在 Python/Matplotlib 中动画 "growing"线图

java - Java 字符串什么时候被驻留?

java - Firebase onDataChange - 空对象引用

Java - 关于 JTextField 和 JPasswordField 的问题

java - 如何在 Java2D 中进行 Photoshop 混合浮雕等

c++ - 点不会通过 OpenGl 中的键盘输入移动