Моя цель - создать прозрачный JFrame с непрозрачным JPanel, который постоянно рисует квадрат в произвольном месте
private static final int alpha = 255;
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setUndecorated(true);
frame.setBackground(new Color(255, 255, 255, alpha));
CustomPanel panel = new CustomPanel();
panel.setBackground(new Color(255, 255, 255, 0));
new Timer().schedule(new TimerTask() {
@Override
public void run() {
panel.revalidate();
panel.repaint();
}
}, 0, 1000);
frame.add(panel);
frame.setVisible(true);
}
public static class CustomPanel extends JPanel {
private static final long serialVersionUID = 1L;
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.clearRect(0, 0, getWidth(), getHeight());
g.setColor(new Color(0, 255, 0));
g.fillRect((int)(Math.random() * 380), (int)(Math.random() * 320), 20, 20);
}
}
В настоящее время кадр отображается на белом фоне, а квадратнарисовано правильно.
Однако, если я изменю значение переменной alpha
, например, на 31, вызов clearRect очистит толькопанель с 31 альфа, и последний кадр все еще будет виден
Слева: 1 итерация вправо: 4 итерации
Как вывидно, что рамка будет нарисована 4 раза, а предыдущий экземпляр все еще будет виден.
Как нарисовать прозрачную рамку без видимой старой рамки?
Моя ОСэто Ubuntu 18.04