2017-07-31 4 views
0

J'essaie de créer un JTextField avec un arrière-plan semi-transparent (c'est-à-dire un fond noir avec une valeur alpha de 120). Mon code actuel est:Comment faire JTextField semi-transparent

public static void designTextField(final JTextField tf) { 
     tf.setBorder(null); 
     tf.setFont(new Font("Comfortaa", Font.PLAIN, 30)); 

     tf.setBackground(new Color(0, 0, 0, 120)); 
     tf.setForeground(new Color(200, 200, 200, 200)); 
} 

Cependant, cela ne semble pas fonctionner. Voici les photos ce résultat du code (il y a deux champs de texte):

Aucun texte saisi:

No text entered

texte entré:

Text entered

Comme vous voyez qu'il y a plusieurs bogues dessinés bizarres, et les deux champs de texte semblent complètement non-transparents. Comment puis-je réparer cela?

+1

Les composants Swing ne fonctionnent généralement pas bien avec la transparence. Jetez un oeil à https://tips4java.wordpress.com/2009/05/31/backgrounds-with-transparency/ – Ansharja

Répondre

0

Swing fonctionne parfaitement avec la transparence. Vous avez juste besoin d'ajouter

tf.setOpaque(false); 

https://docs.oracle.com/javase/tutorial/uiswing/painting/problems.html section « Problème: les artefacts visuels apparaissent dans mon interface graphique », explique.

+0

J'ai déjà essayé ceci, et il en résulte que les champs de texte deviennent simplement complètement blancs: https: // sc. reflex.rip/PHcyfX.png – HopeIsNope

+0

Pour avoir un arrière-plan de champ de texte semi-transparent, vous devez également modifier la manière dont le composant a été peint: 'JTextField tf = new JTextField() { @Override protected void paintComponent (Graphiques g) { g .setColor (nouvelle couleur (0, 0, 0, 100)); g.fillRect (getX(), getY(), getWidth(), getHeight()); super.paintComponent (g); } }; ' –