gpt4 book ai didi

Java - JButton 与变化的背景

转载 作者:行者123 更新时间:2023-12-01 21:53:40 25 4
gpt4 key购买 nike

我正在尝试创建一个 JButton,其背景可以轻松更改。它应该只显示一些简单的彩色矩形。它可以与添加了 JLabels 的 JPanel 进行比较。你有什么想法吗?

最佳答案

一种方法是重写 JButtonpaintComponent 方法。在此示例中,我为此创建了新类 ColorButton。不幸的是,程序还必须使用我的解决方案重新绘制按钮的文本。点击here进行预览。

代码:

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Example {

public Example() {
ColorButton button = new ColorButton("Button");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
button.changeBackground();
}
});
button.doClick();

JFrame frame = new JFrame();
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Example();
}
});
}

}

class ColorButton extends JButton {

private Color rec1Color;
private Color rec2Color;
private Color rec3Color;
private Color rec4Color;
private Random random = new Random();

public ColorButton(String text) {
setText(text);
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(getRec1Color());
g.fillRect(0, 0, getWidth() / 2, getHeight() / 2);
g.setColor(getRec2Color());
g.fillRect(getWidth() / 2, 0, getWidth() / 2, getHeight() / 2);
g.setColor(getRec3Color());
g.fillRect(0, getHeight() / 2, getWidth() / 2, getHeight() / 2);
g.setColor(getRec4Color());
g.fillRect(getWidth() / 2, getHeight() / 2, getWidth() / 2, getHeight() / 2);
g.setColor(getForeground());
g.drawString(getText(), (getWidth() - g.getFontMetrics().stringWidth(getText())) / 2,
(getHeight() - g.getFontMetrics().getHeight()) / 2 + g.getFontMetrics().getAscent());
}

public void changeBackground() {
setRec1Color(createRandomColor());
setRec2Color(createRandomColor());
setRec3Color(createRandomColor());
setRec4Color(createRandomColor());
}

private Color createRandomColor() {
return new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256));
}

public Color getRec1Color() {
return rec1Color;
}

public void setRec1Color(Color rec1Color) {
this.rec1Color = rec1Color;
}

public Color getRec2Color() {
return rec2Color;
}

public void setRec2Color(Color rec2Color) {
this.rec2Color = rec2Color;
}

public Color getRec3Color() {
return rec3Color;
}

public void setRec3Color(Color rec3Color) {
this.rec3Color = rec3Color;
}

public Color getRec4Color() {
return rec4Color;
}

public void setRec4Color(Color rec4Color) {
this.rec4Color = rec4Color;
}

}

关于Java - JButton 与变化的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34750250/

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