Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo hacer un botón redondo en swt? escribir un fragmento de código

¿Cómo hacer un botón redondo en swt? escribir un fragmento de código

paquete com.zz.jfram;

importar java.awt.Color;

importar java.awt.Cursor

importar java.awt.Dimension; /p>

importar java.JButton;

importar javax.swing.JFrame;

clase pública CircleButton extiende JButton {

forma privada forma = nulo ;// Se utiliza para mantener la forma del botón, lo que ayuda a escuchar los eventos de clic en el botón

public CircleButton(String label) {

super(label);

this.MouseAdapter(){

/**

* {@inheritDoc}

*/

public void mouseEntered (MouseEvent e) {

((JButton)e.getSource()).setCursor(new Cursor(Cursor.HAND_CURSOR));

}

/ **

* {@inheritDoc}

*/

> public void mouseExited(MouseEvent e) {

((JButton) e.getSource()).setCursor(new Cursor(Cursor.MOVE_CURSOR));

}

});

Tamaño de dimensión = getPreferredSize(); // Obtener el tamaño óptimo del botón

// Cambiar el tamaño del botón para convertirlo en un cuadrado

size.width = size.height = Math.max(size.width, size .height);

setPreferredSize(size);

// Hacer que el botón j no dibuje un fondo, es decir, no muestre un fondo cuadrado, sino que dibuje un fondo circular

setContentAreaFilled(false);

}

// Dibuja el fondo del botón.

> // Dibuja el fondo y la etiqueta para el botón gráfico

protected void paintComponent(Graphics g) {

if (getModel().setColor( getBackground());

}

// El método fillOval dibujará una elipse tangente al rectángulo y la rellenará

// Cuando el rectángulo es un cuadrado, la elipse es un círculo

g.fillOval(0, 0, getSize().width - 1, getSize().getSize().height - 1);

// Llama a la clase principal paintComponent para dibuja la etiqueta del botón y el pequeño rectángulo donde está el foco

super.paintComponents(g);

}

// Usa un arco simple como borde del botón

// El borde del botón es un círculo > protected void paintBorder(Graphics g) {

g.setColor(getForeground( ));

// Usa el método drawOval para dibujar la elipse interior del rectángulo, pero no la rellenes, solo dibuja el borde

g.drawOval( 0, 0, getSize().width - 1, getSize().height - 1);

}

// Determina si el mouse está encima del botón

public boolean contains(int x, int y) {

p>

// Si el borde y la posición del botón cambian, genera un nuevo objeto de borde y posición

If ((shape == null) ||(!shape.getBounds() .equals(getBounds()))){

// Construye un objeto de elipse

forma = new Ellipse2D.Float(0, 0, getWidth(), getHeight());

}

// Determina si las coordenadas x, y del mouse están dentro del rango forma del botón

return shape.contains(x, y);

}

public static void main(String[] args) {

JButton button = new CircleButton("Haz clic en mí");// Genera un botón circular

//button.setBackground(Color.green);// Establece el color de fondo en verde

// Genera un marco para mostrar el botón

JFrame frame = new JFrame("Graphic Button");

frame.getContentPane().setBackground(Color.amarillo) ;

frame.getContentPane().setLayout(nuevo FlowLayout);

p>