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:
package paintrodrigo;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class GUI {
static CrearYsituarSlider brillo = new CrearYsituarSlider(brillar,longitud);
static CrearYsituarSlider tamaño = new CrearYsituarSlider(disminuir,longitud2);
private static void createAndShowGUI() {
f.
setDefaultCloseOperation(JFrame.
DISPOSE_ON_CLOSE); f.pack();
f.setVisible(true);
}
public static void main
(String[] args
) { @Override
public void run() {
createAndShowGUI();
}
});
}
}
La clase
PanelPaint:
package paintrodrigo;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
static public boolean linea = false;
static public boolean circulo = false;
static public boolean cuadrado = false;
static public boolean arco = false;
static public boolean borrador= false;
static public Color colorFigura
;
static int px;
static int py;
static int ux;
static int uy;
CrearYsituarSlider slider2;
CrearYsituarSlider slider;
Image im
= Toolkit.
getDefaultToolkit().
createImage("src/imagenes/Cuadrado.png");
public PanelPaint(CrearYsituarSlider slider2, CrearYsituarSlider slider) {
this.addMouseListener(this);
this.addMouseMotionListener(this);
this.slider=slider;
this.slider2=slider2;
}
/*public segundoPanel() {
setBorder(BorderFactory.createLineBorder(colorFigura));
this.addMouseListener(this);
this.addMouseMotionListener(this);
}*/
}
public void paintComponent
(Graphics g
) { super.paintComponent(g);
this.
setBackground(Color.
GREEN); System.
out.
println("px " + px
); //System.out.println("py " + py);
System.
out.
println("ux " + ux
); //System.out.println("uy " + uy);
if (borrador) {
rePintar();
g2.setColor(blanco);
g2.drawLine(px, py, ux, uy);
setCursor(cur);
}
//----------------------------LINEA---------------------------
if (linea) {
rePintar();
//g2.setStroke(new BasicStroke(slider2.valorSlider2()));
g2.setColor(colorFigura);
g2.drawLine(px, py, ux, uy);
}
//----------------------------CIRCULO---------------------------
if (circulo) {
rePintar();
//g2.setStroke(new BasicStroke(slider2.valorSlider2()));
g2.setColor(colorFigura);
g2.fillOval(px, py, ux, uy);
}
//----------------------------CUADRADO---------------------------
if (cuadrado) {
rePintar();
g2.setColor(colorFigura);
g2.drawLine(px, py, ux, py);
g2.drawLine(px, py, px, uy);
g2.drawLine(ux, uy, ux, py);
g2.drawLine(ux, uy, px, uy);
/*setForeground(Color.red);
g2.fillRect(px,py,ux-px,uy-py);
g2.setColor(Color.black);
g2.drawRect(px,py,ux-px,uy-py);*/
}
}
public void rePintar() {
for (int t = 0, a = 0; t < posicionesBorrador.size(); t += 4, a++) {
g2.drawLine((int) posicionesBorrador.get(t), (int) posicionesBorrador.get(t + 1),
(int) posicionesBorrador.get(t + 2), (int) posicionesBorrador.get(t + 3));
}
for (int t = 0, a = 0; t < posicionesLinea.size(); t += 4, a++) {
g2.
setColor((Color) colorLinea.
get(a
)); g2.drawLine((int) posicionesLinea.get(t), (int) posicionesLinea.get(t + 1),
(int) posicionesLinea.get(t + 2), (int) posicionesLinea.get(t + 3));
}
for (int t = 0, a = 0; t < posicionesCirculo.size(); t += 4, a++) {
g2.
setColor((Color) colorCirculo.
get(a
)); g2.fillOval((int) posicionesCirculo.get(t), (int) posicionesCirculo.get(t + 1),
(int) posicionesCirculo.get(t + 2), (int) posicionesCirculo.get(t + 3));
}
}
@Override
if (borrador) {
px = e.getPoint().x;
py = e.getPoint().y;
ux = px;
uy = py;
posicionesBorrador.add(px);
posicionesBorrador.add(py);
posicionesBorrador.add(ux);
posicionesBorrador.add(uy);
colorBorrador.add(colorFigura);
}
if (linea) {
ux = e.getPoint().x;
uy = e.getPoint().y;
//repaint(px, py, ux, uy);
}
if (circulo) {
ux = e.getPoint().x - px;
uy = e.getPoint().y - py;
//repaint(px, py, ux, uy);
}
if (cuadrado) {
ux = e.getPoint().x;
uy = e.getPoint().y;
//repaint(px, py, ux, uy);
}
repaint();
}
@Override
}
@Override
System.
out.
println("linea " + linea
); System.
out.
println("circulo " + circulo
); System.
out.
println("cuadrado " + cuadrado
); System.
out.
println("arco " + arco
);
}
@Override
if (linea) {
px = e.getPoint().x;
py = e.getPoint().y;
}
if (circulo) {
px = e.getPoint().x;
py = e.getPoint().y;
}
if (cuadrado) {
px = e.getPoint().x;
py = e.getPoint().y;
}
}
@Override
if (linea) {
posicionesLinea.add(px);
posicionesLinea.add(py);
posicionesLinea.add(ux);
posicionesLinea.add(uy);
colorLinea.add(colorFigura);
}
if (circulo) {
posicionesCirculo.add(px);
posicionesCirculo.add(py);
posicionesCirculo.add(ux);
posicionesCirculo.add(uy);
colorCirculo.add(colorFigura);
}
}
@Override
}
@Override
}
}
La clase CrearYsituarSlider:
package paintrodrigo;
import java.awt.GridLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class CrearYsituarSlider
extends JPanel{ MyChangeAction accion= new MyChangeAction();
this.label2=label2;
this.label=label;
crearYsituarSlider();
}
private void crearYsituarSlider() {
slider.setValue(50);
slider.addChangeListener(accion);
this.add(label2);
this.add(label);
this.add(slider);
System.
out.
println(valorSlider2
()); }
public float valorSlider2(){
return accion.valorSlider();
}
CrearYsituarSlider slider2;
@Override
int value = slider.getValue();
label.setText(str);
float numero=value*1.0f;
System.
out.
println("El numero es "+numero
);
//System.out.println(slider.getValue()*1.0f);
}
public float valorSlider(){
float slider3;
slider3=slider.getValue();
return slider3;
}
}
}
La clase BotonesHerramientas:
package paintrodrigo;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
public BotonesHerramientas() {
crearYsituarBotonesHerramientas();
}
private void crearYsituarBotonesHerramientas() {
String[] nombre
= {"Borrador",
"Lapiz",
"Linea",
"Curva",
"Rectangulo",
"Elipse"}; String[] imagen
= {"goma.jpg",
"16_em_pencil.png",
"stock_draw_line.png",
"Curva.png",
"stock_draw_rounded_rectangle.png",
"stock_draw_ellipse.png"};
for (int i = 0; i < nombre.length; i++) {
boton.setName(nombre[i]);
boton.setText(nombre[i]);
boton.setIcon(icon);
boton.
setBackground(Color.
white); boton.addActionListener(this);
this.add(boton);
}
}
@Override
if (boton.getText().equals("Borrador")){
System.
out.
println("Borrador"); PanelPaint.borrador = true;
PanelPaint.linea=false;
PanelPaint.circulo = false;
PanelPaint.cuadrado = false;
}
if (boton.getText().equals("Linea")){
PanelPaint.borrador=false;
PanelPaint.linea=true;
PanelPaint.circulo = false;
PanelPaint.cuadrado = false;
//panelPaint.arco = false;
}
}
}
Y la clase BotonesColores:
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public BotonesColores(){
situarBotonesColores();
}
private void situarBotonesColores() {
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
}; //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"};
for(int i=0; i<colors.length ;i++){
botnColor.
setName(String.
valueOf(i
)); botnColor.setBackground(colors[i]);
//botnColor.setName(colors_name[i]);
botnColor.addActionListener(this);
botnColor.setText(" ");
this.add(botnColor);
}
}
@Override
PanelPaint.colorFigura = boton.getBackground();
}
}
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!!