画一个标签,包含一个显示一个圆圈的图标

所以我试图绘制一个标签,其中包含一个显示圆圈的图标。 圆圈最初将填充为红色,然后根据我按下的3个按钮中的哪一个,使用重绘将其更改为绿色,蓝色或红色。

这是我到目前为止:

public class ColorChanger implements Icon { public static void main(String[] args) { // TODO Auto-generated method stub JFrame myFrame = new JFrame(); JButton redButton = new JButton("Red"); JButton greenButton = new JButton("Green"); JButton blueButton = new JButton("Blue"); Graphics g; ColorChanger myCircle = new ColorChanger(); final JLabel myLabel = new JLabel(myCircle); // myCircle.paintIcon(myFrame, g, 50, 50); final int FRAME_WIDTH = 300; final int FRAME_HEIGHT = 200; myFrame.setSize(FRAME_WIDTH, FRAME_HEIGHT); myFrame.setLayout(new FlowLayout()); myFrame.add(redButton); myFrame.add(greenButton); myFrame.add(blueButton); myFrame.add(myLabel); myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); myFrame.pack(); myFrame.setVisible(true); } @Override public int getIconWidth() { // TODO Auto-generated method stub return 10; } @Override public int getIconHeight() { // TODO Auto-generated method stub return 10; } @Override public void paintIcon(Component c, Graphics g, int x, int y) { // TODO Auto-generated method stub Graphics2D g2 = (Graphics2D) g; Ellipse2D.Double circle = new Ellipse2D.Double(50, 50, 10, 10); g2.setColor(Color.RED); g2.fill(circle); } } 

我的问题是,我不知道要在paintIcon中传递什么图形g。 有没有不同的方法来做到这一点? 我很感激任何帮助。

 Ellipse2D.Double circle = new Ellipse2D.Double(50, 50, 10, 10); 

图标的大小为(10,10)。 50,超出了Icon的范围。 绘画是相对于图标完成的,因此椭圆应该是:

 Ellipse2D.Double circle = new Ellipse2D.Double(0, 0, 10, 10); 

它将使用重绘变为绿色,蓝色或红色。

您的ColorChanger类需要一个setColor(Color color)方法,以便您可以动态更改要绘制的颜色。 然后paintIcon()方法应该使用这种颜色。