Jak utworzyć rozszerzenie JButton z zaokrąglonymi rogami?
To jest kontynuacja pytania„Java Rounded Swing JButton”. Szukałem rozszerzenia javax.swing.JButton, które dziedziczy wszystkie zachowania środowiska wykonawczego i po prostu zastępuje rysunek narożników.
Korzystanie z kodu podanego przeznoah.w nastrona słonecznych forów wynik wygląda tak:
alt text http://i40.tinypic.com/107qfkp.jpg
Chciałbym mieć ten sam gradient w tle, przy zmianie myszki itp. Czy ktoś wie, jak to zrobić?
Kod, który tworzy okno Java Swing z obrazu to:
<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>