Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 317
  • Last Modified:

5 second color change

Hi experts,
How do I make a labels text change color for 5 seconds then go back to black.


also, if someone could help me.. I accidentally asked a question outside the java topic area. Either tell me how to change it or take a look at it to solve : http://www.experts-exchange.com/Programming/Q_21135331.html

thank you
0
Samooramad
Asked:
Samooramad
  • 10
  • 8
  • 6
2 Solutions
 
objectsCommented:
new Thread(new Runnable()
{
   public void run()
   {
      Color orig = label.getColor();
      label.setText(Color.green);
      try
      {
         Thread.sleep(5000);
      }
      catch (Exception ex)
      {}
      label.setColor(orig);
   }
});
0
 
CEHJCommented:
You could do something like:


                  class ColorSetter implements Runnable {
                        JLabel label;
                        Color toColor;
                        Color fromColor;
                        int delay;

                        public ColorSetter(JLabel label, Color toColor, int delay) {
                              fromColor = label.getBackground();
                              this.label = label;
                              this.toColor = toColor;
                              this.delay = delay; // in milliseconds
                        }

                        public void run() {
                              System.out.println("Setting color...");
                              if (label.isOpaque() == false) {
                                    label.setOpaque(true);
                              }
                              label.setBackground(toColor);
                              try {
                                    Thread.currentThread().sleep(delay);
                              }
                              catch(Exception e) {
                                    /* ignore */
                              }
                              System.out.println("Restoring color...");
                              label.setBackground(fromColor);
                        }
                  }


      public void actionPerformed(ActionEvent e) {
            try {
                  new Thread(new ColorSetter(yourLabel, Color.red, 5000)).start();
            }
            catch(Exception ex) {
                  ex.printStackTrace();
            }

      }

0
 
CEHJCommented:
(Although how you do it depends on what thread you want to do this from)
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
objectsCommented:
>     label.setText(Color.green);

that should of cource be setForeground() not setText()  :)
same when resetting it

Use setBackground() if you want to change the background colour.
0
 
SamooramadAuthor Commented:
>>(Although how you do it depends on what thread you want to do this from)

dont have any experience with them so can't answer that
0
 
CEHJCommented:
In what context of your application are you setting the color?
0
 
SamooramadAuthor Commented:
sorry I still dont understand CEHJ :)
0
 
CEHJCommented:
From where do you intend to do this?
0
 
SamooramadAuthor Commented:
labels on a panel in an internal frame.. is that what you meant?
0
 
SamooramadAuthor Commented:
why did you use delay CEHJ?
what does it delay exactly?
0
 
objectsCommented:
you can use the following class like so:

new Timer(5000, new Changer(label, Color.green)).start();

public class Changer implerments ActionListener
{
   private JLabel L;
   private Color C;
   public Changer(JLabel l, Color c)
   {
     L = l;
    C = label.getColor();
    l.setColor(c);
   }
   public void actionPerformed(ActionEvent evt)
   {
         L.setColor(C);
   }
}
0
 
SamooramadAuthor Commented:
objects in your code.. do i need to call run somehow to activate the thread?
0
 
objectsCommented:
if you have morew than one label then you could enhance it to use an array of labels
0
 
objectsCommented:
> do i need to call run somehow to activate the thread?

no
0
 
SamooramadAuthor Commented:
how could I change the code to pass the labels as parameters?
0
 
objectsCommented:
to change a label (and have it change back) you would use:

new Timer(5000, new Changer(label, Color.green)).start();

0
 
CEHJCommented:
>>
why did you use delay CEHJ?
what does it delay exactly?
>>

It delays the change of Color

>>how could I change the code to pass the labels as parameters?

The code i posted already does that

>>How do I make a labels text change color for 5 seconds then go back to black.

The code i posted does just that. Since you didn't specify you want this to happen repeatedly, it simply happens once
0
 
SamooramadAuthor Commented:
I don't know what I did wrong objects but it didnt work.. I didnt get any errors
0
 
SamooramadAuthor Commented:
>>The code i posted does just that. Since you didn't specify you want this to happen repeatedly, it simply happens once
yes I only want it once.. Ok give me some time and I'll get back to you CEHJ. I'm working on it
0
 
CEHJCommented:
Runnable example (although you can delete nearly all of the imports ;-)):

import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.awt.font.*;
import java.util.*;
import java.io.*;
import javax.imageio.ImageIO;

public class F extends JFrame implements ActionListener {
      JEditorPane editorPane;
      JLabel yourLabel;

      private void setGui() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            yourLabel = new JLabel("Save image");
            getContentPane().add(yourLabel, BorderLayout.CENTER);
            JButton b = new JButton("Change color");
            b.addActionListener(this);
            getContentPane().add(b, BorderLayout.SOUTH);
      }


class ColorSetter implements Runnable {
                  JLabel label;
                  Color toColor;
                  Color fromColor;
                  int delay;

                  public ColorSetter(JLabel label, Color toColor, int delay) {
                        fromColor = label.getBackground();
                        this.label = label;
                        this.toColor = toColor;
                        this.delay = delay; // in milliseconds
                  }

                  public void run() {
                        System.out.println("Setting color...");
                        if (label.isOpaque() == false) {
                              label.setOpaque(true);
                        }
                        label.setBackground(toColor);
                        try {
                              Thread.currentThread().sleep(delay);
                        }
                        catch(Exception e) {
                              /* ignore */
                        }
                        System.out.println("Restoring color...");
                        label.setBackground(fromColor);
                  }
            }


      public void actionPerformed(ActionEvent e) {
            try {
                  new Thread(new ColorSetter(yourLabel, Color.red, 5000)).start();
            }
            catch(Exception ex) {
                  ex.printStackTrace();
            }

      }


      public static void main(String[] args) throws Exception {
            F f = new F();
            f.setGui();
            f.pack();
            f.setVisible(true);
      }

}
0
 
SamooramadAuthor Commented:
hey CEHJ what does setopaque do?
0
 
CEHJCommented:
It makes the component opaque. It it's not opaque and you set its Color, you won't notice any difference
0
 
SamooramadAuthor Commented:
oh.. maybe thats why I could get objects code to work :)

yours worked great!

thank you
0
 
CEHJCommented:
8-)
0

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

  • 10
  • 8
  • 6
Tackle projects and never again get stuck behind a technical roadblock.
Join Now