Go Premium for a chance to win a PS4. Enter to Win

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

Set disabled text color on JButton

I have a JButton with HTML text:

JButton button = new JButton("<html><center>Manage<br>Users</center></html>");

When I disabled the button, the text still appear in black. How do I make the disabled text in gray (as it should appear when it's not in HTML)? This is what I currently do:

button.setText("<html><center><font color=\"666666\">Manage<br>Users</font></center></html>");
button.setEnabled(false);

I don't really like this way of doing. Is there a better way?
0
yongsing
Asked:
yongsing
  • 4
  • 2
  • 2
  • +3
1 Solution
 
harvkCommented:
Try the setVisible() method and see what happens...

0
 
yongsingAuthor Commented:
Calling setVisible(false) would have made the whole button disappear.
0
 
saurav17Commented:


Hi yongsing,

What u have done now is the only solution to that.

If u use setvisible method, the button on whole will disappear.

I'm sorry u have no other options.


Regards,
K.J.S.
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!

 
mjsmith99Commented:
Extend JButton and override setEnabled().  Include your button-colouring code in the overriding method.



Regards,
Mike
mjsmith99@hotmaildotyouknowwhat
0
 
objectsCommented:
Override setEnabled and change the HTML button text:

public void setEnabled(boolean flag)
{
  if (flag)
  {
     setText("<html><center><font color=\"666666\">Manage<br>Users</font></center></html>");
  }
  else
  {
     setText("<html><center><font color=\"222222\">Manage<br>Users</font></center></html>");
  }
  super.setEnabled(flag);
  repaint();
}

0
 
yongsingAuthor Commented:
objects, that was exactly what I had done. I am actually hoping for a less complicated method.
0
 
objectsCommented:
Not sure there is a simpler way.
As you're using HTML for specifying the button text then that is what is being displayed regardless of whether it's enabled or disabled.
0
 
yongsingAuthor Commented:
Thanks. It seems that there's no other way of doing it.
0
 
mlempertCommented:
I created a class that extends JButton and I provide the Enabled and Disabled text with an overridden setEnabled(boolean) method.  This way I only have to specify the text in one place and the text changes based on the setEnabled parameter value.

Example usage
JButton button=new TextChangeButton(
    "<html><center>Manage<br>Users</center></html>",
    "<html><center><font color=\"666666\">Manage<br>Users</font></center></html>");
...
button.setEnabled(true); // Show manage users in black
button.setEnabled(false); // Show manage users in grey
import javax.swing.JButton;
 
/**
 * Class to change the text of a JButton when the button is enabled or disabled.
 * In the case of HTML text, this class can be used to "Gray out" the button if
 * it is disabled and reset when the button is enabled.
 * 
 * @author mlempert
 */
public class TextChangeButton extends JButton {
    private String enabledText = null;
    private String disabledText = null;
 
    /**
     * Constructor
     * @param enabledText  Enabled text
     */
    public TextChangeButton(String enabledText) {
        super(enabledText);
        this.enabledText = enabledText;
    }
 
    /**
     * Constructor
     * @param enabledText  Enabled text
     * @param disabledText Disabled text
     */
    public TextChangeButton(String enabledText, String disabledText) {
        this(enabledText);
        this.disabledText = disabledText;
    }
 
    /**
     * Set the button text and the enabled text
     * 
     * @param enabledText Enabled text
     */
    public void setText(String enabledText) {
        this.enabledText = enabledText;
        super.setText(enabledText);
    }
 
    /**
     * Set the disabled text
     * 
     * @param disabledText
     */
    public void setDisabledText(String disabledText) {
        this.disabledText = disabledText;
    }
 
    /*
     * @see javax.swing.AbstractButton#setEnabled(boolean)
     */
    public void setEnabled(boolean b) {
        super.setEnabled(b);
        if (disabledText != null)
            super.setText(b ? this.enabledText : this.disabledText);
    }
    
    /**
     * Show the enabled text
     */
    public void showEnabledText(){
    	super.setText(this.enabledText);
    }
    
    /**
     * Show the disabled text
     */
    public void showDisabledText(){
    	if (disabledText != null)
            super.setText(this.disabledText);
    }
}

Open in new window

0
 
yongsingAuthor Commented:
Good effort, mlempert. But unfortunately you are late by almost 6 years, and this question is no longer relevant to me now. :)
0
 
mlempertCommented:
I understand.  I thought that it might help someone else who might be searching for a similar situation.  I ran across this on an internet search for something else.
0

Featured Post

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!

  • 4
  • 2
  • 2
  • +3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now