有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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。 我不确定如何修复此错误并获得所需的输出

代码变得有点长,所以我无法准确地指出错误的确切原因,因此非常感谢您的帮助


共 (2) 个答案

  1. # 1 楼答案

    你似乎从未改变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已经拥有的支持

  2. # 2 楼答案

    When I run this, i get an error saying compiler cannot resolve class ColorIcon.

    ColorIcon类的构造函数是

    public ColorIcon(int aWidth, ChangeColor c)
    

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

    你用错误的参数调用它

    final ColorIcon icon = new ColorIcon(20);