Como criar uma extensão JButton com cantos arredondados?
Esta é uma continuação da pergunta"Java arredondado Swing JButton". Eu procurei por uma extensão de javax.swing.JButton que herdará todo o comportamento do tempo de execução e apenas substituirá o desenho dos cantos.
Usando o código dado pornoah.w empágina dos fóruns do sol o resultado é assim:
texto alternativo http://i40.tinypic.com/107qfkp.jpg
Eu gostaria de poder ter o mesmo gradiente no fundo, no mouse sobre a mudança, etc. Alguém sabe como fazer isso?
O código que cria a janela Java Swing a partir da imagem é:
<code>public class XrButton extends JButton implements MouseListener { private static final long serialVersionUID = 9032198251140247116L; String text; boolean mouseIn = false; public XrButton(String s) { super(s); text = s; setBorderPainted(false); addMouseListener(this); setContentAreaFilled(false); } @Override public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; if (getModel().isPressed()) { g.setColor(g.getColor()); g2.fillRect(3, 3, getWidth() - 6, getHeight() - 6); } super.paintComponent(g); if (mouseIn) g2.setColor(Color.red); else g2.setColor(new Color(128, 0, 128)); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setStroke(new BasicStroke(1.2f)); g2.draw(new RoundRectangle2D.Double(1, 1, (getWidth() - 3), (getHeight() - 3), 12, 8)); g2.setStroke(new BasicStroke(1.5f)); g2.drawLine(4, getHeight() - 3, getWidth() - 4, getHeight() - 3); g2.dispose(); } public static void main(String[] args) { JFrame frame = new JFrame(); frame.getContentPane().setLayout(new FlowLayout()); XrButton xrButton = new XrButton("XrButton"); JButton jButton = new JButton("JButton"); frame.getContentPane().add(xrButton); frame.getContentPane().add(jButton); frame.setSize(150, 150); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { mouseIn = true; } public void mouseExited(MouseEvent e) { mouseIn = false; } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } </code>