Solved

5 second color change

Posted on 2004-09-17
24
307 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
Technology Partners: 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!

 
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

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!

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Oracle SQL syntax check  without executing 6 104
Which non-HTML GUI front end to use with Java? 3 51
Eclipse with various Java releases 7 44
Setup GlassFish 4 34
INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
Introduction Java can be integrated with native programs using an interface called JNI(Java Native Interface). Native programs are programs which can directly run on the processor. JNI is simply a naming and calling convention so that the JVM (Java…
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…
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:

735 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