Foros del Web » Programación para mayores de 30 ;) » Java »

Dificultad goma de borrar paint

Estas en el tema de Dificultad goma de borrar paint en el foro de Java en Foros del Web. Hola! Tengo un problemon que no sé como solucionar. De verdad agradeceria vuestro tiempo y esfuerzo para que alguien me explique por que la goma ...
  #1 (permalink)  
Antiguo 17/04/2014, 07:49
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 10 años, 8 meses
Puntos: 1
Dificultad goma de borrar paint

Hola! Tengo un problemon que no sé como solucionar. De verdad agradeceria vuestro tiempo y esfuerzo para que alguien me explique por que la goma de borrar no me borra las lineas que pongo de cualquier color pero si que borra el fondo (que he puesto color verde para probarlo) y sin embargo las lineas si que se montan unas encima de otras, porque me estoy volviendo loco!!!

Es decir, la goma de borrar (que le he puesto color blanco obviamente) borra el fondo del panel pero no borra lo que escribo en el panel. Sin embargo las lineas si que se montan unas encima de otras y he probado con circulos y montan los circulos a las lineas y viceversa.
Añadir que si le pongo cualquier otro color a la goma de borrar usandolo como "brocha" si que se montan unos colores con otros, pero no se montan con los de las esferas o con las lineas.

Voy a dejar TODO el codigo para que podais copiar y pegar todo el proyecto y asi probarlo. La clase donde tengo el problema es en PanelPaint asi que sera esa donde tendremos que centrarnos me temo.

La clase main:
Código Java:
Ver original
  1. package paintrodrigo;
  2.  
  3. import java.awt.BorderLayout;
  4. import javax.swing.JFrame;
  5. import javax.swing.JLabel;
  6. import javax.swing.JPanel;
  7. import javax.swing.SwingUtilities;
  8.  
  9.  
  10.  
  11. public class GUI {
  12.     static JLabel brillar= new JLabel("Brillo");
  13.     static JLabel longitud= new JLabel("50");
  14.     static JLabel disminuir= new JLabel("Tamaño");
  15.     static JLabel longitud2= new JLabel("50");
  16.     static CrearYsituarSlider brillo = new CrearYsituarSlider(brillar,longitud);
  17.     static CrearYsituarSlider tamaño = new CrearYsituarSlider(disminuir,longitud2);
  18.  
  19.     private static void createAndShowGUI() {
  20.         JFrame f = new JFrame("Paint");
  21.         JPanel panel = new JPanel();
  22.         SwingUtilities.isEventDispatchThread();    
  23.         f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  24.         f.setLayout(new BorderLayout());
  25.         panel.setLayout(new BorderLayout());
  26.         panel.add(new BotonesColores(), BorderLayout.SOUTH);
  27.         panel.add(new BotonesHerramientas(), BorderLayout.NORTH);
  28.         panel.add(brillo, BorderLayout.EAST);
  29.         panel.add(tamaño, BorderLayout.WEST);
  30.         f.add(panel, BorderLayout.NORTH);
  31.         f.add(new PanelPaint(tamaño,brillo), BorderLayout.CENTER);
  32.         f.pack();
  33.         f.setVisible(true);
  34.     }
  35.    
  36.     public static void main(String[] args) {
  37.         SwingUtilities.invokeLater(new Runnable() {
  38.             @Override
  39.             public void run() {
  40.                 createAndShowGUI();
  41.             }
  42.         });
  43.     }
  44. }



La clase BotonesHerramientas:

Código Java:
Ver original
  1. package paintrodrigo;
  2.  
  3. import java.awt.Color;
  4. import java.awt.GridLayout;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import javax.swing.ImageIcon;
  8. import javax.swing.JButton;
  9. import javax.swing.JLabel;
  10. import javax.swing.JPanel;
  11. import javax.swing.JSlider;
  12.  
  13.  
  14. public class BotonesHerramientas extends JPanel implements ActionListener {
  15.  
  16.    JSlider slider;
  17.    JLabel label;
  18.    
  19.     public BotonesHerramientas() {
  20.         super(new GridLayout(1, 1));
  21.         crearYsituarBotonesHerramientas();
  22.     }
  23.    
  24.     private void crearYsituarBotonesHerramientas() {
  25.         String url = "/imagenes/";
  26.         String[] nombre = {"Borrador", "Lapiz", "Linea", "Curva", "Rectangulo", "Elipse"};
  27.         String[] imagen = {"goma.jpg", "16_em_pencil.png", "stock_draw_line.png", "Curva.png", "stock_draw_rounded_rectangle.png", "stock_draw_ellipse.png"};
  28.  
  29.         for (int i = 0; i < nombre.length; i++) {
  30.             JButton boton = new JButton();
  31.             boton.setName(nombre[i]);
  32.             boton.setText(nombre[i]);
  33.             ImageIcon icon = new javax.swing.ImageIcon(getClass().getResource(url + imagen[i]));
  34.             boton.setIcon(icon);
  35.             boton.setBackground(Color.white);
  36.             boton.addActionListener(this);
  37.             this.add(boton);
  38.         }
  39.        
  40.        
  41.     }
  42.  
  43.  
  44.  
  45.     @Override
  46.     public void actionPerformed(ActionEvent e) {
  47.         JButton boton = (JButton) e.getSource();
  48.         if (boton.getText().equals("Borrador")){
  49.             System.out.println("Borrador");
  50.             PanelPaint.borrador = true;
  51.             PanelPaint.linea=false;
  52.             PanelPaint.circulo = false;
  53.             PanelPaint.cuadrado = false;
  54.         }
  55.         if (boton.getText().equals("Linea")){
  56.             System.out.println("Linea");
  57.             PanelPaint.borrador=false;
  58.             PanelPaint.linea=true;
  59.             PanelPaint.circulo = false;
  60.             PanelPaint.cuadrado = false;
  61.             //panelPaint.arco = false;
  62.            
  63.         }
  64.     }
  65. }

Y la clase BotonesColores:

Código Java:
Ver original
  1. import java.awt.Color;
  2. import java.awt.GridLayout;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import javax.swing.JButton;
  6. import javax.swing.JPanel;
  7.  
  8. public class BotonesColores extends JPanel implements ActionListener{
  9.      public BotonesColores(){
  10.         super(new GridLayout(1,1));
  11.         situarBotonesColores();
  12.     }
  13.  
  14.     private void situarBotonesColores() {
  15.     Color marron = new Color(156, 93, 82);
  16.     Color[] colors = {Color.WHITE,Color.BLACK, Color.DARK_GRAY, Color.GRAY , Color.LIGHT_GRAY,Color.BLUE,Color.CYAN, Color.GREEN, Color.RED, Color.MAGENTA,Color.PINK ,Color.ORANGE, Color.YELLOW,marron};
  17.     //Object[] colors_name = {Color.BLACK", "Color.BLUE","Color.CYAN", "Color.DARK_GRAY", "Color.GRAY", "Color.GREEN", "Color.LIGHT_GRAY", "Color.MAGENTA", "Color.ORANGE", "Color.PINK", "Color.RED", "Color.WHITE", "Color.YELLOW"};
  18.         for(int i=0; i<colors.length ;i++){
  19.             JButton botnColor = new JButton();
  20.             botnColor.setName(String.valueOf(i));
  21.             botnColor.setBackground(colors[i]);
  22.             //botnColor.setName(colors_name[i]);
  23.             botnColor.addActionListener(this);
  24.             botnColor.setText(" ");
  25.             this.add(botnColor);
  26.            
  27.         }
  28.        
  29.     }
  30.  
  31.     @Override
  32.     public void actionPerformed(ActionEvent e) {
  33.         JButton boton = (JButton)e.getSource();
  34.         PanelPaint.colorFigura = boton.getBackground();
  35.     }
  36.  
  37. }

No se si alguien podra ayudarme. Recordad que tendreis que quitar la url de las imagenes de la clase BotonesHerramientas, sino, os saltara un error al compilar. Muchisimas gracias a aquel que me ayude o aquellos, y seguiré intentandolo por mi cuenta. Si logro encontrar la solucion la pondre.

Un saludo!!
  #2 (permalink)  
Antiguo 17/04/2014, 07:50
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Dificultad goma de borrar paint

La clase PanelPaint:

Código Java:
Ver original
  1. package paintrodrigo;
  2.  
  3. import java.awt.BasicStroke;
  4. import java.awt.Color;
  5. import java.awt.Cursor;
  6. import java.awt.Dimension;
  7. import java.awt.Graphics;
  8. import java.awt.Graphics2D;
  9. import java.awt.Image;
  10. import java.awt.Point;
  11. import java.awt.Toolkit;
  12. import java.awt.event.MouseEvent;
  13. import java.awt.event.MouseListener;
  14. import java.awt.event.MouseMotionListener;
  15. import java.util.ArrayList;
  16. import javax.swing.BorderFactory;
  17. import javax.swing.JPanel;
  18.  
  19. public class PanelPaint extends JPanel implements MouseListener, MouseMotionListener {
  20.  
  21.     static public boolean linea = false;
  22.     static public boolean circulo = false;
  23.     static public boolean cuadrado = false;
  24.     static public boolean arco = false;
  25.     static public boolean borrador= false;
  26.    
  27.     static public Color colorFigura;
  28.    
  29.     static int px;
  30.     static int py;
  31.     static int ux;
  32.     static int uy;
  33.  
  34.     ArrayList posicionesBorrador = new ArrayList();
  35.     ArrayList tamañoBorrador = new ArrayList();
  36.     ArrayList colorBorrador = new ArrayList();
  37.    
  38.     ArrayList posicionesLinea = new ArrayList();
  39.     ArrayList colorLinea = new ArrayList();
  40.     ArrayList tamañoLinea = new ArrayList();
  41.    
  42.     ArrayList posicionesCirculo = new ArrayList();
  43.     ArrayList colorCirculo = new ArrayList();
  44.     ArrayList tamañoCirculo = new ArrayList();
  45.    
  46.     static Graphics2D g2;
  47.     Color blanco = Color.white;
  48.    
  49.     CrearYsituarSlider slider2;
  50.     CrearYsituarSlider slider;
  51.     Image im = Toolkit.getDefaultToolkit().createImage("src/imagenes/Cuadrado.png");
  52.     Cursor cur = Toolkit.getDefaultToolkit().createCustomCursor(im, new Point(10,10),"WILL");  
  53.  
  54.     public PanelPaint(CrearYsituarSlider slider2, CrearYsituarSlider slider) {
  55.         setBorder(BorderFactory.createLineBorder(colorFigura));
  56.         this.addMouseListener(this);
  57.         this.addMouseMotionListener(this);
  58.         this.slider=slider;
  59.         this.slider2=slider2;
  60.     }
  61.  
  62.     public Dimension getPreferredSize() {
  63.         return new Dimension(50, 400);
  64.     }
  65.  
  66.     public void paintComponent(Graphics g) {
  67.         super.paintComponent(g);
  68.         g2 = (Graphics2D) g;
  69.         this.setBackground(Color.GREEN);
  70.         System.out.println("px " + px);
  71.          //System.out.println("py " + py);
  72.          System.out.println("ux " + ux);
  73.          //System.out.println("uy " + uy);
  74.          
  75.          ////////////////////////////BORRADOR////////////////////////////        
  76.          if (borrador) {
  77.             rePintar();
  78.             g2.setStroke(new BasicStroke(slider2.valorSlider2()));
  79.             g2.setColor(blanco);
  80.             g2.drawLine(px, py, ux, uy);
  81.             setCursor(cur);
  82.         }
  83. ////////////////////////////LINEA////////////////////////////
  84.         if (linea) {
  85.             rePintar();
  86.             //g2.setStroke(new BasicStroke(slider2.valorSlider2()));
  87.             g2.setColor(colorFigura);
  88.             g2.drawLine(px, py, ux, uy);
  89.             setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
  90.         }
  91. ////////////////////////////CIRCULO////////////////////////////
  92.         if (circulo) {
  93.             rePintar();
  94.             //g2.setStroke(new BasicStroke(slider2.valorSlider2()));
  95.             g2.setColor(colorFigura);
  96.             g2.fillOval(px, py, ux, uy);
  97.             setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
  98.         }
  99. ////////////////////////////CUADRADO////////////////////////////
  100.         if (cuadrado) {
  101.             rePintar();
  102.             g2.setColor(colorFigura);
  103.             g2.drawLine(px, py, ux, py);
  104.             g2.drawLine(px, py, px, uy);
  105.             g2.drawLine(ux, uy, ux, py);
  106.             g2.drawLine(ux, uy, px, uy);
  107.            
  108.             /*setForeground(Color.red);
  109.             g2.fillRect(px,py,ux-px,uy-py);
  110.             g2.setColor(Color.black);
  111.             g2.drawRect(px,py,ux-px,uy-py);*/  
  112.         }        
  113.  
  114.     }
  115.  
  116.     public void rePintar() {
  117.        
  118.        
  119.        
  120.         for (int t = 0, a = 0; t < posicionesLinea.size(); t += 4, a++) {
  121.             g2.setStroke(new BasicStroke(slider2.valorSlider2()));
  122.             g2.setColor((Color) colorLinea.get(a));
  123.             g2.drawLine((int) posicionesLinea.get(t), (int) posicionesLinea.get(t + 1),
  124.                     (int) posicionesLinea.get(t + 2), (int) posicionesLinea.get(t + 3));
  125.         }
  126.        
  127.         for (int t = 0, a = 0; t < posicionesCirculo.size(); t += 4, a++) {
  128.             g2.setColor((Color) colorCirculo.get(a));
  129.             g2.fillOval((int) posicionesCirculo.get(t), (int) posicionesCirculo.get(t + 1),
  130.                     (int) posicionesCirculo.get(t + 2), (int) posicionesCirculo.get(t + 3));
  131.         }
  132.         for (int t = 0, a = 0; t < posicionesBorrador.size(); t += 4, a++) {
  133.             g2.setStroke(new BasicStroke(slider2.valorSlider2()));
  134.             g2.setColor(Color.WHITE);
  135.             g2.drawLine((int) posicionesBorrador.get(t), (int) posicionesBorrador.get(t + 1),
  136.                     (int) posicionesBorrador.get(t + 2), (int) posicionesBorrador.get(t + 3));
  137.         }
  138.        
  139.     }
  140.  
  141.     @Override
  142.     public void mouseDragged(MouseEvent e) {
  143.        
  144.         if (linea) {
  145.             ux = e.getPoint().x;
  146.             uy = e.getPoint().y;
  147.             //repaint(px, py, ux, uy);
  148.         }
  149.        
  150.         if (circulo) {
  151.             ux = e.getPoint().x - px;
  152.             uy = e.getPoint().y - py;
  153.             //repaint(px, py, ux, uy);
  154.         }
  155.        
  156.         if (cuadrado) {
  157.             ux = e.getPoint().x;
  158.             uy = e.getPoint().y;
  159.             //repaint(px, py, ux, uy);
  160.         }
  161.        
  162.         if (borrador) {
  163.             px = e.getPoint().x;
  164.             py = e.getPoint().y;
  165.             ux = px;
  166.             uy = py;    
  167.             posicionesBorrador.add(px);
  168.             posicionesBorrador.add(py);
  169.             posicionesBorrador.add(ux);
  170.             posicionesBorrador.add(uy);
  171.             //colorBorrador.add(colorFigura);        
  172.         }
  173.        
  174.         repaint();
  175.     }
  176.  
  177.     @Override
  178.     public void mouseMoved(MouseEvent e) {
  179.     }
  180.  
  181.     @Override
  182.     public void mouseClicked(MouseEvent e) {
  183.         System.out.println("linea " + linea);
  184.         System.out.println("circulo " + circulo);
  185.         System.out.println("cuadrado " + cuadrado);
  186.         System.out.println("arco " + arco);
  187.     }
  188.  
  189.     @Override
  190.     public void mousePressed(MouseEvent e) {
  191.        
  192.        if (linea) {
  193.             px = e.getPoint().x;
  194.             py = e.getPoint().y;
  195.        }
  196.        
  197.        if (circulo) {
  198.             px = e.getPoint().x;
  199.             py = e.getPoint().y;
  200.        }
  201.        
  202.        if (cuadrado) {
  203.             px = e.getPoint().x;
  204.             py = e.getPoint().y;
  205.        }    
  206.     }
  207.  
  208.     @Override
  209.     public void mouseReleased(MouseEvent e) {
  210.        
  211.         if (linea) {
  212.             posicionesLinea.add(px);
  213.             posicionesLinea.add(py);
  214.             posicionesLinea.add(ux);
  215.             posicionesLinea.add(uy);
  216.             colorLinea.add(colorFigura);
  217.         }
  218.        
  219.         if (circulo) {
  220.             posicionesCirculo.add(px);
  221.             posicionesCirculo.add(py);
  222.             posicionesCirculo.add(ux);
  223.             posicionesCirculo.add(uy);
  224.             colorCirculo.add(colorFigura);
  225.         }      
  226.     }
  227.  
  228.     @Override
  229.     public void mouseEntered(MouseEvent e) {
  230.     }
  231.  
  232.     @Override
  233.     public void mouseExited(MouseEvent e) {
  234.     }
  235. }

La clase CrearYsituarSlider:

Código Java:
Ver original
  1. package paintrodrigo;
  2.  
  3. import java.awt.GridLayout;
  4. import javax.swing.JLabel;
  5. import javax.swing.JPanel;
  6. import javax.swing.JSlider;
  7. import javax.swing.event.ChangeEvent;
  8. import javax.swing.event.ChangeListener;
  9.  
  10.  
  11. public class CrearYsituarSlider extends JPanel{
  12.     JSlider slider;
  13.     JLabel label;
  14.     JLabel label2;
  15.     MyChangeAction accion= new MyChangeAction();
  16.    
  17.     public CrearYsituarSlider(JLabel label2, JLabel label){
  18.         super(new GridLayout(2, 4));
  19.         this.label2=label2;        
  20.         this.label=label;
  21.         crearYsituarSlider();
  22.     }
  23.     private void crearYsituarSlider() {
  24.         slider = new JSlider();
  25.         slider.setValue(50);
  26.         slider.addChangeListener(accion);
  27.         this.add(label2);
  28.         this.add(label);
  29.         this.add(slider);  
  30.        System.out.println(valorSlider2());
  31.     }
  32.     public float valorSlider2(){
  33.         return accion.valorSlider();
  34.     }
  35.  
  36.    
  37.     public class MyChangeAction implements ChangeListener {
  38.         CrearYsituarSlider slider2;
  39.        
  40.         @Override
  41.         public void stateChanged(ChangeEvent ce) {
  42.             int value = slider.getValue();
  43.             String str = Integer.toString(value);
  44.             label.setText(str);
  45.             float numero=value*1.0f;
  46.                 System.out.println("El numero es "+numero);
  47.  
  48.             //System.out.println(slider.getValue()*1.0f);
  49.         }
  50.          public float valorSlider(){
  51.              float slider3;    
  52.              slider3=slider.getValue();          
  53.              return slider3;            
  54.         }
  55.     }
  56. }

estos son el resto de clases

Última edición por Mechabits; 21/04/2014 a las 02:05
  #3 (permalink)  
Antiguo 21/04/2014, 02:08
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Dificultad goma de borrar paint

Hola de nuevo! He editado el PanelPaint. Arregle algo pero no consigo que se me guarden los diferentes tamaños que uso tanto para la linea como para la goma de borrar. Alguna idea?

Un saludo gracias!!!

Etiquetas: clase, dificultad, paint, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:50.