使用按钮更改包含图标的标签的颜色



我正在尝试使用3个不同的jbutton来改变图标的颜色,每个jbutton都有不同的颜色。

图标是一个圆圈,开始时默认为红色。当用户点击"蓝色"按钮时,圆圈的颜色变为蓝色,"绿色"也是同样的道理。

要更新这个图标的颜色,我应该使用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本身的颜色

buttonRed.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        color = Color.RED;
        label.repaint();
    }
});

相反,确保你也将颜色应用到图标上。

buttonRed.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        color = Color.RED;
        icon.setColor(color);
        label.repaint();
    }
});

Icon不应该依赖于任何其他信息,除了它自己提供的,所以不要试图从另一个来源获得颜色,只需使用ColorIcon已经拥有的支持

当我运行这个,我得到一个错误说编译器不能解析类ColorIcon .

ColorIcon类的构造函数是

public ColorIcon(int aWidth, ChangeColor c)

它需要一个int和一个ChnageColor参数。

你用错误的参数调用它。

final ColorIcon icon = new ColorIcon(20);

最新更新