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.