Buenas! Estoy haciendo un cursillo de Java y ahora me toca pelearme con Applets + Swing... El programa es el tipico paint, tienes tu ventanita y vas dibujando sobre la misma... Si quieres borrar pues haces click derecho, por defecto dibuja con el color negro salvo que se active la casilla para el color rojo.
Cual es el problema? Pues que si sobreescribo el metodo Paint me pinta absolutamente toda la pantalla en blanco (y eso que yo no le puse un setBackground(Color.white)), ocultandome todos los componentes de mi ventana hasta que pase el cursor por encima. Es un tanto rallante... a las malas, hay alguna forma de delimitar la zona en la que quiero que se pinte? Como si fuera un lienzo y de esa forma que no se pueda pintar encima de los componentes?
Originalmente yo habia realizado este mismo programa pero como una ventana JFrame, funcionaba sin problemas, ha sido al querer realizarlo en un JApplet cuando ha dado tanto el follon...
Os pego el codigo a ver que os parece:
spoiler
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JRadioButton;
public class Dibujanding extends JApplet {
private int posicionx = 0, posiciony = 0;
private JRadioButton rojo;
private int boton=0;
private JButton limpiar;
private Graphics g;
public void init() {
this.setLayout(null);
rojo = new JRadioButton("Rojo");
rojo.setBounds(10, 10, 80, 20);
this.getContentPane().add(rojo);
limpiar = new JButton("Limpiar");
limpiar.setBounds(90, 10, 80, 20);
this.getContentPane().add(limpiar);
this.setVisible( true );
this.addMouseMotionListener(
new MouseMotionAdapter(){
public void mouseDragged( MouseEvent event )
{
posicionx = event.getX();
posiciony = event.getY();
if(javax.swing.SwingUtilities.isRightMouseButton(event))
boton = 1;
else
boton = 0;
repaint();
}
}
);
limpiar.addActionListener(
new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
update(g);
}
});
}
public void update(Graphics g){
g.clearRect(0, 0,this.getSize().width, this.getSize().height);
}
@Override
public void paint ( Graphics g ){
if(boton==1){
g.setColor(super.getBackground());
g.fillOval(posicionx, posiciony, 5, 5);
}
else{
if(rojo.isSelected()){
g.setColor(Color.red);
g.fillOval(posicionx, posiciony, 5, 5);
}else{
g.setColor(Color.black);
g.fillOval(posicionx, posiciony, 5, 5);
}
}
}
}
Desde ya muchas gracias a los valientes que se animen a echarme un cable ^^