Les questions disent tout vraiment, je veux que l'arrière-plan d'un JTextField soit semi-transparent et j'utilise une minuterie pour le faire clignoter.Rendre JTextField semi-transparent
J'ai donc trouvé que l'utilisation du textField.setBackground() traditionnel crée un étrange problème graphique où à chaque flash le champ de texte est plus sombre qu'il ne devrait l'être. (Voir ci-dessous)
Ainsi, après la recherche en ligne j'ai essayé de passer outre la méthode de peinture du JTextField avec le code suivant:
name = new JTextField(15) {
@Override
protected void paintComponent(Graphics g) {
g.setColor(this.getBackground());
g.fillRect(getX(), getY(), getWidth(), getHeight());
super.paintComponent(g);
}
};
En outre, certains ont recommandé que je mets le champ de texte opaque booléen à faux. Ce que je fis et en vain, maintenant il n'y a même pas de clignotement rouge et je reçois simplement ceci:
fields with field.setOpaque(false);
Juste au cas où il aide, voici le code que je utilise pour faire les champs clignotent.
public void flashField(JTextField field, Color flashColor, final int flashDelay, final int numberOfFlashes) {
timers.add(new Timer(flashDelay, new ActionListener() {
int counter = 0;
@Override
public void actionPerformed(ActionEvent e) {
counter++;
if (counter % 2 == 0)
field.setBackground(
new Color(flashColor.getRed(), flashColor.getBlue(), flashColor.getGreen(), 50));
else
field.setBackground(Color.WHITE);
if (counter == (numberOfFlashes * 2) + 1) {
((Timer) e.getSource()).stop();
}
field.repaint();
}
}));
timers.get(timers.size() - 1).start();
}