Sunday, May 1, 2011

make a button round

hi, im trying to make a JButton round at the (x,y) corrds of (150,210). i want the button to be an oval of the size (40,40). and the buttons background color red. it doesnt need text so i should get a button to what ever size i want right.

i am using a panel and i set the setLayout to null

setLayout(null)

i checked google and it brought me here please help me.

From stackoverflow
  • JDC Tech Tips: August 26, 1999: Creating Round Swing Buttons

    import java.awt.*;
    import java.awt.geom.*;
    import javax.swing.*;
    
    public class RoundButton extends JButton {
      public RoundButton(String label) {
        super(label);
    
    // These statements enlarge the button so that it 
    // becomes a circle rather than an oval.
        Dimension size = getPreferredSize();
        size.width = size.height = Math.max(size.width, 
          size.height);
        setPreferredSize(size);
    
    // This call causes the JButton not to paint 
       // the background.
    // This allows us to paint a round background.
        setContentAreaFilled(false);
      }
    
    // Paint the round background and label.
      protected void paintComponent(Graphics g) {
        if (getModel().isArmed()) {
    // You might want to make the highlight color 
       // a property of the RoundButton class.
          g.setColor(Color.lightGray);
        } else {
          g.setColor(getBackground());
        }
        g.fillOval(0, 0, getSize().width-1, 
          getSize().height-1);
    
    // This call will paint the label and the 
       // focus rectangle.
        super.paintComponent(g);
      }
    
    // Paint the border of the button using a simple stroke.
      protected void paintBorder(Graphics g) {
        g.setColor(getForeground());
        g.drawOval(0, 0, getSize().width-1, 
          getSize().height-1);
      }
    
    // Hit detection.
      Shape shape;
      public boolean contains(int x, int y) {
    // If the button has changed size, 
       // make a new shape object.
        if (shape == null || 
          !shape.getBounds().equals(getBounds())) {
          shape = new Ellipse2D.Float(0, 0, 
            getWidth(), getHeight());
        }
        return shape.contains(x, y);
      }
    
    // Test routine.
      public static void main(String[] args) {
    // Create a button with the label "Jackpot".
        JButton button = new RoundButton("Jackpot");
        button.setBackground(Color.green);
    
    // Create a frame in which to show the button.
        JFrame frame = new JFrame();
        frame.getContentPane().setBackground(Color.yellow);
        frame.getContentPane().add(button);
        frame.getContentPane().setLayout(new FlowLayout());
        frame.setSize(150, 150);
        frame.setVisible(true);
      }
    }
    
  • There's a good explanation of how you can do this here: http://forums.sun.com/thread.jspa?threadID=284897&tstart=28696 that can be extended to buttons of any shape.

  • Easy it is called JRounded button

  • if make a round button follow this way, i think that it's over complex. Can you create an OvalButton by another way?

    brian_d : if you are not concerned about the actual clickable bounds of the oval (keeping it to the containing rectangle), then using a png image and setContentAreaFilled(false); works

0 comments:

Post a Comment