2011-11-18 3 views
1

Mon programme est censé créer des icônes de cercle dans le dialogue. J'ai trois boutons, chacun représente une couleur de l'icône à faire. Donc, si je clique 10 fois sur différents boutons, mon programme devrait créer 10 cercles de différentes couleurs. Ceci est mon code, en 2 classes:Composite, boutons et icônes

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); 
    } 
} 

Et mon autre classe:

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(); 
     } 
    } 
} 

À ce stade, mon programme ne sera même pas compiler, et le problème est dans la CompositeIcon classe, à icon.addIcon(new CircleIcon(50, Color.red)); pour le "bouton rouge", et la même chose pour le bleu et le vert.

+0

Quelle est l'exception? – r0ast3d

+0

Si j'essaye de courir, et appuie sur un de mes boutons j'obtiens le code d'erreur: "Exception dans le fil" AWT-EventQueue-0 "java.lang.Error: Problème non résolu de compilation: \t Le constructeur CircleIcon (int, couleur) est indéfini \t à CompositeIcon $ 1.actionPerformed (CompositeIcon.java:20) – user1054685

+0

@ user1054685 pourquoi créer un tableau d'icônes – mKorbel

Répondre

1

J'ai testé votre code. Votre classe CircleIcon a un constructeur manquant. Ajoutez ceci à votre classe d'icône de cercle.

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