Java swing使用按钮更改包含图标的标签的颜色
我试图用3个不同的按钮来改变图标的颜色,每个按钮对应不同的颜色
图标是一个以红色默认值开始的圆圈。当用户点击名为“蓝色”的按钮时,圆圈的颜色会变为蓝色,与“绿色”的意思相同
要更新此图标颜色,我应该使用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。 我不确定如何修复此错误并获得所需的输出
代码变得有点长,所以我无法准确地指出错误的确切原因,因此非常感谢您的帮助
# 1 楼答案
你似乎从未改变
ColorIcon
本身的颜色相反,也要确保将颜色应用到图标上
Icon
不应该依赖于它自己提供的信息之外的任何其他信息,所以与其试图从另一个来源获得颜色,只需使用ColorIcon
已经拥有的支持# 2 楼答案
ColorIcon类的构造函数是
它需要一个int和一个ChnageColor参数
你用错误的参数调用它