2009-10-07 10 views
1

je peux effacer un JLabel normal à l'aide d'une minuterie, comme suit:Fondu un JLabel qui contient html

public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
//  final JLabel label = new JLabel("<html><font color=red>Red</font><font color=blue>Blue</font>"); 
     final JLabel label = new JLabel("Hello"); 
     label.setOpaque(true); 
     label.setBackground(Color.WHITE); 
     frame.getContentPane().add(label); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

     final Timer timer = new Timer(100, null); 

     final int steps = 25; 

     timer.addActionListener(new ActionListener() { 
      int count = 0; 

      public void actionPerformed(ActionEvent e) { 
       if (count <= steps) { 
        float intensity = count/(float) steps; 
        label.setForeground(new Color(intensity, intensity, intensity)); 
        count++; 
       } else { 
        timer.stop(); 
       } 
      } 
     }); 
     timer.start(); 
    } 

Comment puis-je faire fonctionner aussi avec un JLabel qui contient html, selon le en commentaire ligne?

final JLabel label = new JLabel("<html><font color=red>Red</font><font color=blue>Blue</font>"); 

Répondre

1

Vous devez effacer le code HTML:

float intensity = count/(float) steps; 
String color = String.format("%02x" % 255*intensity); 
label.setText("<html><font color='#FF"+color+color+"'>Red</font>..."); 
2

Je suis sorti mon exemplaire de "clients" Filthy Rich et lire sur l'utilisation de matériaux composites. Ma solution consiste à créer une sous-classe de JLabel, comme suit:

import javax.swing.*; 
    import java.awt.*; 

    public class FadeableLabel extends JLabel { 

     private float intensity = 1.0f; 

     public FadeableLabel() { 
     } 

     public void setIntensity(float intensity) { 
      this.intensity = intensity; 
      repaint(); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics2D g2 = (Graphics2D) g; 
      final Composite oldComposite = g2.getComposite(); 
      g2.setComposite(AlphaComposite.SrcOver); 
      final Color c = getBackground(); 
      final Color color = new Color(c.getRed(), c.getGreen(), c.getBlue(), (int) (255 * (1.0f - intensity))); 
      g2.setColor(color); 
      g2.fillRect(0, 0, getWidth(), getHeight()); 
      g2.setComposite(oldComposite); 
     } 
    } 
Questions connexes