2011-11-18 64 views
1

我的程序应该在对话框中创建圆形图标。 我有三个按钮,每个都代表要制作的图标的颜色。 所以,如果我在各种按钮上点击10次,我的程序应该创建10个不同颜色的圆圈。 这是我的代码,在2类:复合材料,按钮和图标

import java.util.*; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class CompositeIcon extends JFrame { 
     static CircleIcon icon; 

    public static void main(String[] args) { 
     final JFrame frame = new JFrame(); 
     final JLabel label = new JLabel(); 
      JButton redBut = new JButton("Red"); 
      JButton blueBut = new JButton("Blue"); 
      JButton greenBut = new JButton("Green"); 

      icon = new CircleIcon(); 

      redBut.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
     icon.addIcon(new CircleIcon(50, Color.red)); 
     label.setIcon(icon); 
     frame.repaint(); 
     frame.pack(); 
     } 
    }); 

      blueBut.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
     icon.addIcon(new CircleIcon(50, Color.blue)); 
     label.setIcon(icon); 
     frame.repaint(); 
     frame.pack(); 
     } 
    }); 

      greenBut.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
     icon.addIcon(new CircleIcon(50, Color.green)); 
     label.setIcon(icon); 
     frame.repaint(); 
     frame.pack(); 
     } 
    }); 


     frame.setLayout(new FlowLayout()); 
     label.setPreferredSize(new Dimension(400, 200)); 
     frame.add(redBut); 
     frame.add(blueBut); 
     frame.add(greenBut); 
     frame.add(label); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 

而我的其他类:

import java.util.*; 
import java.awt.*; 
import javax.swing.*; 

public class CircleIcon implements Icon { 
     private ArrayList<Icon> icons; 
     private int width; 
     private int height; 

    public CircleIcon() { 
     icons = new ArrayList<Icon>(); 
    } 

    public void addIcon(Icon icon) { 
     icons.add(icon); 
     width += icon.getIconWidth(); 
     int iconHeight = icon.getIconHeight(); 
     if (height < iconHeight) 
      height = iconHeight; 
    } 

    public int getIconHeight() { 
     return height; 
    } 

    public int getIconWidth() { 
     return width; 
    } 

    public void paintIcon(Component c, Graphics g, int x, int y) { 
     for (Icon icon : icons) { 
      icon.paintIcon(c, g, x, y); 
      x += icon.getIconWidth(); 
     } 
    } 
} 

在这一点上我的程序甚至不会编译,问题是在CompositeIcon级, 在icon.addIcon(new CircleIcon(50, Color.red));为“红色按钮”,蓝色和绿色相同。

+0

什么是例外? – r0ast3d

+0

如果我尝试运行,并按下我的一个按钮,我得到错误代码: “线程中的异常”AWT-EventQueue-0“java.lang.Error:未解决的编译问题: \t构造函数CircleIcon(int,Color )未定义 \t at CompositeIcon $ 1.actionPerformed(CompositeIcon.java:20) – user1054685

+0

@ user1054685为什么要创建一个图标阵列 – mKorbel

回答

1

我测试了你的代码。您的CircleIcon类缺少构造函数。将此添加到你的圈子图标类。

public CircleIcon(int number, Color awtColor) { 
     // do whatever here 
    }