Draw a JButton to look like a JLabel (or at least without the button edge?)

12,025

Solution 1

You will want to do the following:

        setFocusPainted(false);
        setMargin(new Insets(0, 0, 0, 0));
        setContentAreaFilled(false);
        setBorderPainted(false);
        setOpaque(false);

You may want to exclude setFocusPainted(false) if you want it to actually paint the focus (e.g. dotted line border on Windows look and feel).

I have used the above code in cases where I have wanted an "icon only" button.

Solution 2

Set the background color to transparent, and the border to an EmptyBorder instance.

E.g.

   JButton button = new JButton();
   button.setBackground(null);
   button.setOpaque(false);
   button.setBorder(new EmptyBorder());

The text will still move up and down as you click the button, and the button can still be "armed" by clicking, holding, and "disarmed" by moving the mouse out of the button area.

If you don't want this behaviour, then you probably don't want to use a button, and use a real label instead.

Solution 3

button.setBorderPainted( false );
button.setContentAreaFilled( false ); // ?
Share:
12,025
Dave
Author by

Dave

Lifelong computer enthusiast turned Software developer. Recently emerged from the command-line C world into web systems under .NET. I'm greatly enjoying the fact I haven't had a single pointer-related error in over a year.

Updated on June 03, 2022

Comments

  • Dave
    Dave about 2 years

    I've got a JButton that for various reasons I want to act like a button, but look like a JLabel. It doesn't actually have to be a JLabel under the hood, I just don't want the raised button edge to show up.

    Is there an easy way to turn off the "button look" for JButtons but keep all the button functionality?

    I could build some kind of composed subclass hyperbutton that delegated to a jlabel for display purposes, but I'm really hoping there's something along the lines of button.lookLikeAButton(false).

  • shemnon
    shemnon almost 14 years
    There is so much more to a button than a mouse listener. What about linking it up to an action? What about armed/pressed/released? What about debouncing? Making a label act like a button is much more complicated than making a button look like a label, so go with the pixel amputation, it will be less painful.
  • Dave
    Dave almost 14 years
    Perfect! This did exactly what I was looking for. Thanks!
  • hepcat72
    hepcat72 about 8 years
    I added these, and then it looked just like the JLabel and the cursor would change to a hand so the user knows it's clickable: setBorder(new EmptyBorder(0,0,0,0)); setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
  • osmedd
    osmedd over 7 years
    As an alternative, you can also have the icon change (e.g. the shading) or the background color change to also let the user know it is clickable.