我正在尝试使用3种不同的JButton来更改图标的颜色,每种颜色都是不同的颜色。Java swing - 使用按钮更改包含图标的标签的颜色
该图标是以红色默认值开始的圆圈。当用户点击称为“蓝色”的按钮时,圆圈将颜色变为蓝色,对于“绿色”则变成相同的想法。
要更新这个图标颜色,我应该使用repaint()方法。
这是我创建红色圆圈图标的方法。
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class ColorIcon implements Icon
{
private int width;
private Color color;
private ChangeColor c;
public ColorIcon(int aWidth, ChangeColor c)
{
this.c = c;
width = aWidth;
color = Color.RED;
}
public int getIconWidth()
{
return width;
}
public int getIconHeight()
{
return width/2;
}
public void setColor(Color c)
{
color = c;
}
public void paintIcon(Component c, Graphics g, int x, int y)
{
color = c.color;
Graphics2D g2 = (Graphics2D) g;
Ellipse2D.Double ellipse = new Ellipse2D.Double(x,y, width, width);
g2.setColor(color);
g2.fill(ellipse);
}
}
这里是我用来测试它的类。这个类是带有事件处理函数的类,它创建了按下按钮时应该改变图标颜色的按钮。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class TestColorIcon{
public java.awt.Color color = java.awt.Color.RED;
public Component createComponents()
{
JButton buttonRed = new JButton("Red");
JButton buttonBlue = new JButton("Blue");
JButton buttonGreen = new JButton("Green");
final ColorIcon icon = new ColorIcon(20);
final JLabel label = new JLabel(icon);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(0, 3));
panel.add(buttonRed);
panel.add(buttonBlue);
panel.add(buttonGreen);
panel.add(label);
buttonRed.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
color = Color.RED;
label.repaint();
}
});
buttonBlue.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
color = Color.BLUE;
label.repaint();
}
});
buttonGreen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
color = Color.GREEN;
label.repaint();
}
});
return panel;
}
public static void main(String[] args)
{
JFrame frame = new JFrame();
ChangeColor changeColor = new ChangeColor();
Component content = changeColor.createComponents();
frame.getContentPane().add(content);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.show();
}
}
当我运行这个,我得到一个错误,说编译器无法解决类ColorIcon。 我不知道如何解决这个错误,并得到所需的输出。
代码已经变得有点长,所以我无法找到错误的确切原因,所以任何帮助表示赞赏。
您的问题简而言之就是ColorIcon类不会编译 - 在尝试在另一个类中使用该类之前先修复这些错误!你的编译器应该已经告诉你了,你应该已经用你的问题报告过了。另外,请不要发布格式不正确的代码。您正在向志愿者请求免费帮助,因此请尽量正确地设置您的代码格式,包括正确和一致的缩进。 –