gpt4 book ai didi

java - 如何创建带圆角的 JButton 扩展?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:52 26 4
gpt4 key购买 nike

这是问题 "Java rounded Swing JButton" 的延续.我已经搜索了 javax.swing.JButton 的扩展,它将继承所有运行时行为并且只是覆盖角的绘制。

使用 noah.w 给出的代码在 sun forums page结果如下所示:

alt text

我希望能够在背景中有相同的渐变,在鼠标悬停时发生变化等。有人知道该怎么做吗?

从图片创建 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) {
}

最佳答案

我认为您在这里有 2 个选择:

1.在你的组件的paint方法中实现你自己的绘制

2.为您的外观和感觉创建新的 ButtonUI。在这种情况下,我建议使用 Synch LAF

在这两种情况下绘制不同的状态是你的责任

关于java - 如何创建带圆角的 JButton 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1007116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com