这是“Java rounded Swing JButton”问题的延续。我已经搜索了 javax.swing.JButton 的扩展,它将继承所有运行时行为并仅覆盖角的绘制。
使用sun 论坛页面上noah.w给出的代码,结果如下所示:
我希望能够在背景中具有相同的渐变,鼠标悬停变化等。有人知道该怎么做吗?
从图片中创建 Java Swing 窗口的代码是:
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) {
}