J'essaye de doubler un tampon transparent JWindow
mais il semble que la technique utilisée ne prenne aucun effet (différentes valeurs de cycle sont dessinées les unes sur les autres).Double buffering avec un JWindow
public final class Overlay extends JWindow {
public static final Color TRANSPARENT = new Color(0, true);
public static Font standardFont = null;
public static Overlay open() {
return new Overlay();
}
private Overlay() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setAlwaysOnTop(true);
setBounds(0, 0, screenSize.width, screenSize.height);
setBackground(TRANSPARENT);
}
@Override
public void paint(Graphics g) {
BufferedImage bufferedImage = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g2d = bufferedImage.createGraphics();
paintUs(g2d);
Graphics2D g2dComponent = (Graphics2D) g;
g2dComponent.drawImage(bufferedImage, null, 0, 0);
}
private void paintUs(Graphics2D g) {
int height = 420;
int x = 20;
g.setColor(TRANSPARENT);
g.fillRect(0, 0, getWidth(), getHeight());
g.setFont(standardFont == null ? standardFont = g.getFont().deriveFont(17f) : standardFont);
for (Plugin plugin : Abendigo.plugins()) {
g.setColor(Abendigo.plugins().isEnabled(plugin) ? Color.GREEN : Color.RED);
g.drawString(plugin.toString(), x + 5, getHeight() - height);
height += 20;
}
height += 20;
g.setColor(Color.YELLOW);
g.drawString("Cycle: " + Abendigo.elapsed + "ms", x, getHeight() - height);
}
@Override
public void update(Graphics g) {
paint(g);
}
}
Il ne semblait pas double tamponné. Le texte du cycle de changement se passe comme suit: http://i.imgur.com/HSPLJ1v.png – Jire
Probablement, vous avez brisé la chaîne de peinture et avez échoué à appeler une ou plusieurs des méthodes de peinture super (comme dans votre exemple – MadProgrammer
Merci, j'ai créé un 'JPanel' et remplacé le' paintComponent' dans cela, puis le mettre à opaque ainsi que de définir son arrière-plan à 'TRANSPARENT'. Fonctionne très bien! – Jire