Je sais qu'une question similaire était posted before, mais il n'y avait pas de réponse ou un exemple de code.Transparent JPanel sur Canvas (VLCJ)
J'ai besoin d'un JPanel transparent sur une toile. Le code affiché ci-dessous ne fonctionne pas
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);
}
}
En utilisant la propriété GlassPane de l'ensemble du cadre est la toute dernière solution (fortement déconseillée)
oui, j'ai lu sur le problème poids lourd/poids léger, mais je suis obligé d'utiliser la toile ... J'étudie SWT maintenant, mais je préfère SWING. – FearUs