2009-04-22 31 views
9

Estoy tratando de hacer una ronda de JButton en las coordenadas (x, y) de (150,210). Quiero que el botón sea un óvalo del tamaño (40,40). Y los botones de fondo de color rojo. No necesita texto, así que debería obtener un botón al tamaño que desee, ¿no?Haz un botón redondo

estoy usando un panel, y me puse la setLayout a nulo:

setLayout(null) 

yo nos registramos Google, y me trajo aquí. ¿Cómo puedo hacer esto?

Respuesta

12

JDC Tech Tips: 26 Agosto, 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); 
    } 
} 
+2

Esto no funciona en OS X 10.7.5. Sale como un gran botón cuadrado con un círculo dentro. Esto funciona mucho mejor: http://java-swing-tips.blogspot.com/2008/07/create-round-image-jbutton.html – d512

0

Si hacer un botón redondo sigue de esta manera, creo que es demasiado complejo. Quizás podría crear un OvalButton de otra manera.

+2

si no está preocupado por los límites reales que se pueden hacer clic en el óvalo (manteniéndolo en el rectángulo que lo contiene), luego usando una imagen png y setContentAreaFilled (false); trabajos –

Cuestiones relacionadas