Solved

5 second color change

Posted on 2004-09-17
24
309 Views
Last Modified: 2010-03-31
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
Comment
Question by:Samooramad
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 10
  • 8
  • 6
24 Comments
 
LVL 92

Assisted Solution

by:objects
objects earned 100 total points
ID: 12089126
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
 
LVL 86

Accepted Solution

by:
CEHJ earned 300 total points
ID: 12089134
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
 
LVL 86

Expert Comment

by:CEHJ
ID: 12089143
(Although how you do it depends on what thread you want to do this from)
0
MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

 
LVL 92

Expert Comment

by:objects
ID: 12089184
>     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
 

Author Comment

by:Samooramad
ID: 12089339
>>(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
 
LVL 86

Expert Comment

by:CEHJ
ID: 12089347
In what context of your application are you setting the color?
0
 

Author Comment

by:Samooramad
ID: 12089413
sorry I still dont understand CEHJ :)
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12089420
From where do you intend to do this?
0
 

Author Comment

by:Samooramad
ID: 12089440
labels on a panel in an internal frame.. is that what you meant?
0
 

Author Comment

by:Samooramad
ID: 12089447
why did you use delay CEHJ?
what does it delay exactly?
0
 
LVL 92

Expert Comment

by:objects
ID: 12089450
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
 

Author Comment

by:Samooramad
ID: 12089451
objects in your code.. do i need to call run somehow to activate the thread?
0
 
LVL 92

Expert Comment

by:objects
ID: 12089453
if you have morew than one label then you could enhance it to use an array of labels
0
 
LVL 92

Expert Comment

by:objects
ID: 12089457
> do i need to call run somehow to activate the thread?

no
0
 

Author Comment

by:Samooramad
ID: 12089511
how could I change the code to pass the labels as parameters?
0
 
LVL 92

Expert Comment

by:objects
ID: 12089529
to change a label (and have it change back) you would use:

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

0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12091059
>>
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
 

Author Comment

by:Samooramad
ID: 12091487
I don't know what I did wrong objects but it didnt work.. I didnt get any errors
0
 

Author Comment

by:Samooramad
ID: 12091493
>>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
 
LVL 86

Expert Comment

by:CEHJ
ID: 12091505
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
 

Author Comment

by:Samooramad
ID: 12091690
hey CEHJ what does setopaque do?
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12091703
It makes the component opaque. It it's not opaque and you set its Color, you won't notice any difference
0
 

Author Comment

by:Samooramad
ID: 12091720
oh.. maybe thats why I could get objects code to work :)

yours worked great!

thank you
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12091728
8-)
0

Featured Post

The Ultimate Checklist to Optimize Your Website

Websites are getting bigger and complicated by the day. Video, images, custom fonts are all great for showcasing your product/service. But the price to pay in terms of reduced page load times and ultimately, decreased sales, can lead to some difficult decisions about what to cut.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
Introduction This article is the last of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers our test design approach and then goes through a simple test case example, how …
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question