2015-10-07 233 views
-1

我正在尝试使用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。 我不知道如何解决这个错误,并得到所需的输出。

代码已经变得有点长,所以我无法找到错误的确切原因,所以任何帮助表示赞赏。

+1

您的问题简而言之就是ColorIcon类不会编译 - 在尝试在另一个类中使用该类之前先修复这些错误!你的编译器应该已经告诉你了,你应该已经用你的问题报告过了。另外,请不要发布格式不正确的代码。您正在向志愿者请求免费帮助,因此请尽量正确地设置您的代码格式,包括正确和一致的缩进。 –

回答

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已经

1

当我运行这个,我得到一个错误,说编译器无法解决类 ColorIcon。

你的ColorIcon类的构造函数是

public ColorIcon(int aWidth, ChangeColor c) 

该公司预计一个int和一个ChnageColor参数。

而你用错误的参数调用它。

final ColorIcon icon = new ColorIcon(20);