gpt4 book ai didi

java - 用 Java 设计按钮(就像在 CSS 中一样)

转载 作者:行者123 更新时间:2023-12-02 09:40:41 25 4
gpt4 key购买 nike

对于我的项目,我需要创建可自定义的按钮。除了我有问题而且我不知道如何解决它。我的按钮有一个背景图像,我希望它可以根据文本在 X 和 Y 方向上扩展,而不会损失质量。你有什么想法吗?

background image example

最佳答案

Swing 有一个可插入的 Look&Feel,它允许通过 ComponentUI(在本例中:ButtonUI)改变其小部件的外观。

按钮示例:

enter image description here

class StyledButtonUI extends BasicButtonUI {

@Override
public void installUI (JComponent c) {
super.installUI(c);
AbstractButton button = (AbstractButton) c;
button.setOpaque(false);
button.setBorder(new EmptyBorder(5, 15, 5, 15));
}

@Override
public void paint (Graphics g, JComponent c) {
AbstractButton b = (AbstractButton) c;
paintBackground(g, b, b.getModel().isPressed() ? 2 : 0);
super.paint(g, c);
}

private void paintBackground (Graphics g, JComponent c, int yOffset) {
Dimension size = c.getSize();
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor(c.getBackground().darker());
g.fillRoundRect(0, yOffset, size.width, size.height - yOffset, 10, 10);
g.setColor(c.getBackground());
g.fillRoundRect(0, yOffset, size.width, size.height + yOffset - 5, 10, 10);
}
}

主要测试方法:

public static void main (String[] args) {
JFrame f = new JFrame("Button UI Test");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel p = new JPanel();
p.setBackground(Color.white);
f.setContentPane(p);
p.setLayout(new FlowLayout(5, 5));
p.setBorder(new EmptyBorder(10, 10, 10, 10));

for (int i = 1; i <= 5; i++) {
final JButton button = new JButton("Button #" + i);
button.setFont(new Font("Calibri", Font.PLAIN, 14));
button.setBackground(new Color(0x2dce98));
button.setForeground(Color.white);
// customize the button with your own look
button.setUI(new StyledButtonUI());
p.add(button);
}

f.pack();
f.setLocation(500, 500);
f.setVisible(true);
}

关于java - 用 Java 设计按钮(就像在 CSS 中一样),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23698092/

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