Я знаю, что аналогичный вопрос был опубликован до , но не было никакого кода ответа или примера.
Мне нужен прозрачный JPanel поверх холста.Приведенный ниже код не работает
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
public class Main {
private static class Background extends Canvas{
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.RED);
g.drawOval(10, 10, 20, 20);
}
}
private static class Transparent extends JPanel {
public Transparent() {
setOpaque(false);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.GREEN);
g.drawOval(20, 20, 20, 20);
}
}
public static void main(String[] args){
JFrame frame = new JFrame();
JLayeredPane layered = new JLayeredPane();
Background b = new Background();
Transparent t = new Transparent();
layered.setSize(200, 200);
b.setSize(200, 200);
t.setSize(200, 200);
layered.setLayout(new BorderLayout());
layered.add(b, BorderLayout.CENTER, 1);
layered.add(t, BorderLayout.CENTER, 0);
frame.setLayout(new BorderLayout());
frame.add(layered, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setVisible(true);
}
}
Использование свойства GlassPane всего фрейма - самое последнее решение (крайне не рекомендуется)