codice:public class Test0001 { /** * @param args */ public static void main(String[] args) { Pixel pix = new Pixel(10, 10, 10, 10, Color.WHITE); Icon icon = new Icon(); JMenuBar bar = new JMenuBar(); MenuSize menuSize = new MenuSize(); ToolsMenu tools = new ToolsMenu(icon); MenuColor colors = new MenuColor(); IconPanel panel = new IconPanel(icon); IconController controller = new IconController(icon); controller.setPanel(panel); controller.setTools(tools); controller.setColors(colors); controller.setSizes(menuSize); panel.addMouseListener(controller); colors.addActionListener(controller); colors.getRed().addActionListener(controller); colors.getGreen().addActionListener(controller); colors.getBlue().addActionListener(controller); tools.addActionListener(controller); menuSize.getSize1().addActionListener(controller); menuSize.getSize2().addActionListener(controller); menuSize.getSize3().addActionListener(controller); icon.setPixels(pix); icon.addObserver(panel); bar.setSize(10000, 20); bar.add(menuSize); bar.add(tools); bar.add(colors); JFrame frame = new JFrame("Pixel"); frame.setSize(400, 400); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //panel.add(bar); frame.getContentPane().add(bar,BorderLayout.NORTH); frame.getContentPane().add(panel, BorderLayout.CENTER); //frame.getContentPane().add(panel1); frame.setVisible(true); } } public class IconPanel extends JPanel implements Observer { /** * */ private static final long serialVersionUID = 1L; //private Pixel pixel; private Icon icon; public IconPanel(Icon icon) { super(); //this.pixel = pixel; this.icon = icon; icon.update(); } public void setIcon(Icon icon) { this.icon = icon; } @Override public void paintComponent(Graphics g) { super.paintComponent(g); for(int i = 0; i<icon.getSize(); i++){ for(int j = 0; j<icon.getSize(); j++){ icon.getPixels()[i][j].draw(g); } } } @Override public void update(Observable o, Object arg) { repaint(); } } public class ToolsMenu extends JMenu { private Icon icon; private Colorable tool; private JMenuItem pencil = new JMenuItem("Pencil"); private JMenuItem rubber = new JMenuItem("Rubber"); public ToolsMenu(final Icon icon) { super(); this.icon = icon; this.setText("Tools"); pencil.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { tool = new Pencil(Color.ORANGE); } }); this.add(pencil); rubber.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { tool = new Rubber(); } }); this.add(rubber); } public Colorable getTool() { return tool; } } public class ToolColor implements Colorable{ private Color color; public ToolColor() { super(); } @Override public void setColor(Color color) { this.color = color; } @Override public Color getColor() { return color; } } public class Rubber extends ToolColor { public Rubber() { super(); this.setColor(Color.WHITE); } // @Override // public void setColor(Color color) { // // this.color = color.WHITE; // } // // @Override // public Color getColor() { // // return color; // } public class Pixel { private int x ; private int y; private int width; private int height; private Color color; public Pixel(int x, int y, int width, int height, Color color) { super(); this.x = x; this.y = y; this.width = width; this.height = height; this.color = color; } public void draw(Graphics graphics){ graphics.setColor(color); graphics.fillRect(x, y, width, height); } public void setColor(Color color) { this.color = color; } public Color getColor() { return color; } public void setX(int x) { this.x = x; } public int getX() { return x; } public void setY(int y) { this.y = y; } public int getY() { return y; } public void setWidth(int width) { this.width = width; } public int getWidth() { return width; } public void setHeight(int height) { this.height = height; } public int getHeight() { return height; } } public class Pencil extends ToolColor { public Pencil(Color color ) { super(); this.setColor(color); } // @Override // public void setColor(Color color) { // this.color = color; // // } // // @Override // public Color getColor() { // return color; // } public class MenuSize extends JMenu { /** * */ private static final long serialVersionUID = 1L; private JMenuItem size1 = new JMenuItem("16X16"); private JMenuItem size2 = new JMenuItem("24X24"); private JMenuItem size3 = new JMenuItem("32X32"); public MenuSize() { super(); this.setText("Size"); add(size1); add(size2); add(size3); } public JMenuItem getSize1() { return size1; } public JMenuItem getSize2() { return size2; } public JMenuItem getSize3() { return size3; } } public class MenuColor extends JMenu { /** * */ private static final long serialVersionUID = 1L; private JMenuItem red = new JMenuItem("Red"); private JMenuItem green = new JMenuItem("Green"); private JMenuItem blue = new JMenuItem("Blue"); public MenuColor() { this.setText("Colors"); this.add(red); this.add(green); this.add(blue); } public JMenuItem getRed() { return red; } public JMenuItem getGreen() { return green; } public JMenuItem getBlue() { return blue; } } public class Icon extends Observable implements Observer { private static final int defaultSize = 32; private int size = defaultSize; private Pixel[][] pixels ; public Icon() { super(); pixels = new Pixel[size][size]; } public void setSize(int size) { this.size = size; } public int getSize() { return size; } public void setPixels(Pixel pixel){ int red = pixel.getColor().getRed(); int green = pixel.getColor().getGreen(); int blue = pixel.getColor().getBlue(); int x = pixel.getX(); int y = pixel.getY(); int width = pixel.getWidth(); int height = pixel.getHeight(); for(int i = 0; i<size; i++){ for(int j =0; j<size; j++){ x = x+10; pixels[i][j] = new Pixel(x, y, width, height,new Color(red, green,blue)); } x = pixel.getX(); y = y+10; } } public Pixel[][] getPixels() { return pixels; } public void update(){ setChanged(); notifyObservers(); } @Override public void update(Observable o, Object arg) { update(); } } public interface Colorable { public void setColor(Color color); public Color getColor(); } public class IconController implements ActionListener, MouseListener{ private Icon icon; private IconPanel panel; private ToolsMenu tools; private MenuColor colors; private MenuSize sizes; public IconController(Icon icon) { super(); this.icon = icon; } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == colors.getRed()){ tools.getTool().setColor(Color.RED); }else if(e.getSource() == colors.getGreen()){ tools.getTool().setColor(Color.GREEN); }else if(e.getSource() == colors.getBlue()){ tools.getTool().setColor(Color.BLUE); }else if(e.getSource() == sizes.getSize1() ){ icon.setSize(16); }else if(e.getSource() == sizes.getSize2()){ icon.setSize(24); }else if(e.getSource() == sizes.getSize3()){ icon.setSize(32); } icon.update(); } @Override public void mouseClicked(MouseEvent e) { int x = (e.getX()/10)-2; int y = (e.getY()/10)-1; if(x>=0 && y>=0){ icon.getPixels()[y][x].setColor(tools.getTool().getColor()); icon.update(); }else{;} } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } public void setPanel(IconPanel panel) { this.panel = panel; } public void setTools(ToolsMenu tools) { this.tools = tools; } public void setColors(MenuColor colors) { this.colors = colors; } public void setSizes(MenuSize sizes) { this.sizes = sizes; } }
è un pò lungo lo so; ma ve ne sarei molto gratta se mi diceste che cosa ne pensate .
Grazie in anticipo per il vostro aiuto.