Erro repaint(); changelistener

Pessoal,

Sou novato na área e estou com um pouco de dificuldades, vejam meu código, eu queria que quando movesse o sliderRed ele desse um repaint(); no Canvas, mais não funciona, alguém poderia me ajudar?

Outra coisa, o ChangeListener e o ActionListener não funcionam muito bem, tipo se eu colocar 2 comandos dentro do stateChanged aparecem diversos erros.

Obs. Desculpem pelo código, é que não conheço quase nada de Java, sou curioso, então o código ta um lixo.

[code]import java.awt.;
import java.awt.event.
;
import java.applet.;
import java.util.ArrayList;
import javax.swing.
;
import javax.swing.text.;
import javax.swing.table.DefaultTableModel;
import javax.swing.event.
;

public class Retangulos extends JFrame// implements ActionListener
{
int RA, GA, BA=255, RB=255, GB, BB, RC, GC, BC;
int ax1, ay1, ax2, ay2, aux;
int bx1, by1, bx2, by2, cont=0;
int cx1, cy1, cx2, cy2;

private JButton rectUm, rectDois;
private JRadioButton radioUm, radioDois;
private ButtonGroup radioGroup;
private JSlider sliderRed, sliderGreen, sliderBlue, sliderCyan, sliderMagenta, sliderYellow;
private JLabel labelRed, labelGreen, labelBlue;

class MeuCanvas extends Canvas
{
	public boolean mouseDown(Event e, int x, int y)
	{
		if(radioUm.isSelected()==true)
		{
			ax1=x; ay1=y;
		}
		else if(radioDois.isSelected()==true)
		{
			bx1=x; by1=y;
		}
		return true;
	}

	public boolean mouseUp(Event e, int x, int y)
	{
		if(radioUm.isSelected()==true)
		{
			ax2=x; ay2=y;

			if(ax1>ax2)
			{
				aux=ax1;
				ax1=ax2;
				ax2=aux;
			}
			if(ay1>ay2)
			{
				aux=ay1;
				ay1=ay2;
				ay2=aux;
			}
			
			cont++;
		}
		else if(radioDois.isSelected()==true)
		{
			bx2=x; by2=y;
			
			if(bx1>bx2)
			{
				aux=bx1;
				bx1=bx2;
				bx2=aux;
			}

			if(by1>by2)
			{
				aux=by1;
				by1=by2;
				by2=aux;
			}
			cont++;
		}

		if(ax1>bx1)
			cx1=ax1;
		else
			cx1=bx1;

		if(ay1>by1)
			cy1=ay1;
		else
			cy1=by1;
			
		RC = RA + RB;
		GC = GA + GB;
		BC = BA + BB;
		
		if(RC>255) RC = 255;
		if(GC>255) GC = 255;
		if(BC>255) BC = 255;

		cx2=(Math.max(ax2,bx2)-Math.min(ax1,bx1))-(Math.abs(ax1-bx1)+Math.abs(ax2-bx2));
		cy2=(Math.max(ay2,by2)-Math.min(ay1,by1))-(Math.abs(ay1-by1)+Math.abs(ay2-by2));

		repaint();
		return true;
	}

	public void paint(Graphics g)  // contexto grafico onde o desenho esta sendo desenvolvido
	{
		g.setColor(new Color (RA,GA,BA));
		g.fillRect(ax1,ay1,ax2-ax1,ay2-ay1);
		
		g.setColor(new Color (RB,GB,BB));
		g.fillRect(bx1,by1,bx2-bx1,by2-by1);
		
		g.setColor(new Color (RC,GC,BC));
		g.fillRect(cx1,cy1,cx2,cy2);
	}
}


public Retangulos()
{
	Container container = getContentPane();
	getContentPane().setBackground(new Color(255,255,255));
	getContentPane().setLayout(new BorderLayout());
	JPanel barra = new JPanel();
	
	final JSlider sliderRed = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
	sliderRed.setBorder(BorderFactory.createTitledBorder("RED"));
	sliderRed.setMajorTickSpacing(40);
	sliderRed.setMinorTickSpacing(5);
	sliderRed.addChangeListener(new ChangeListener()
	{
    	public void stateChanged(ChangeEvent evt)
    	{
    		if(radioUm.isSelected()==true)
				RA = sliderRed.getValue();
			if(radioDois.isSelected()==true)
				RB = sliderRed.getValue();

		}
	});

	final JSlider sliderGreen = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
	sliderGreen.setBorder(BorderFactory.createTitledBorder("GREEN"));
	sliderGreen.setMajorTickSpacing(20);
	sliderGreen.setMinorTickSpacing(5);
	sliderGreen.addChangeListener(new ChangeListener()
	{
    	public void stateChanged(ChangeEvent evt)
    	{
    		if(radioUm.isSelected()==true)
				GA = sliderGreen.getValue();
			if(radioDois.isSelected()==true)
				GB = sliderGreen.getValue();
		}
	});
	
	final JSlider sliderBlue = new JSlider(JSlider.HORIZONTAL, 0, 255, 255);
	sliderBlue.setBorder(BorderFactory.createTitledBorder("BLUE"));
	sliderBlue.setMajorTickSpacing(40);
	sliderBlue.setMinorTickSpacing(5);
	sliderBlue.addChangeListener(new ChangeListener()
	{
    	public void stateChanged(ChangeEvent evt)
    	{
    		if(radioUm.isSelected()==true)
				BA = sliderBlue.getValue();
			if(radioDois.isSelected()==true)
				BB = sliderBlue.getValue();
		}
	});
	
	JSlider sliderCyan = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
	sliderCyan.setBorder(BorderFactory.createTitledBorder("CYAN"));
	sliderCyan.setMajorTickSpacing(20);
	sliderCyan.setMinorTickSpacing(5);
	
	JSlider sliderMagenta = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
	sliderMagenta.setBorder(BorderFactory.createTitledBorder("MAGENTA"));
	sliderMagenta.setMajorTickSpacing(40);
	sliderMagenta.setMinorTickSpacing(5);
	
	JSlider sliderYellow = new JSlider(JSlider.HORIZONTAL, 0, 255, 0);
	sliderYellow.setBorder(BorderFactory.createTitledBorder("YELLOW"));
	sliderYellow.setMajorTickSpacing(40);
	sliderYellow.setMinorTickSpacing(5);
	
	radioUm = new JRadioButton( "UM", true );
	radioDois = new JRadioButton( "DOIS", true );
	
	/*rectUm = new JButton("bla");
	rectUm.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent evt) 
    { 

    }
});*/

	
	barra.setLayout(new GridLayout(2,4));
	
	barra.add(sliderRed);
	barra.add(sliderGreen);
	barra.add(sliderBlue);
	barra.add(radioUm);
	
	barra.add(sliderCyan);
	barra.add(sliderMagenta);
	barra.add(sliderYellow);
	barra.add(radioDois);
	
	radioGroup = new ButtonGroup();
  	radioGroup.add( radioUm );
  	radioGroup.add( radioDois );
	
	MeuCanvas c = new MeuCanvas();
	
	getContentPane().add(c);
	
	getContentPane().add(barra, BorderLayout.NORTH);
	
}

public void stateChanged(ChangeEvent evt) {}

public void actionPerformed(ChangeEvent evt) {}

public static void main (final String a[])
{
	JFrame Janela = new Retangulos();
	Janela.show();
	Janela.setTitle("Trabalho de CG I");
	Janela.setSize(640,480);
	Janela.setLocation(220,142);
	Janela.setVisible(true);
}

}[/code]

Qual erro acontece? onde acontece? porque acontece?

Gui, é o seguinte:

Se eu colocar o repaint() no stateChanged ele pinta novamente o quadrado que eu desenhei com a cor selecionada no sliderRed por exemplo, eu tenho que desenhar o quadrado dinovo pra ele aparecer com a cor nova, e se eu colocar mais algum evento, ex: sliderCyan.setValue(255) ele dá um erro assim: (isso com apenas 1 clique no sliderRed)

[code]java.lang.NullPointerException
at Retangulos$1.stateChanged(Retangulos.java:137)
at javax.swing.JSlider.fireStateChanged(JSlider.java:343)
at javax.swing.JSlider$ModelListener.stateChanged(JSlider.java:271)
at javax.swing.DefaultBoundedRangeModel.fireStateChanged(DefaultBoundedR
angeModel.java:346)
at javax.swing.DefaultBoundedRangeModel.setRangeProperties(DefaultBounde
dRangeModel.java:283)
at javax.swing.DefaultBoundedRangeModel.setValueIsAdjusting(DefaultBound
edRangeModel.java:212)
at javax.swing.JSlider.setValueIsAdjusting(JSlider.java:515)
at javax.swing.plaf.basic.BasicSliderUI$TrackListener.mousePressed(Basic
SliderUI.java:1343)
at java.awt.Component.processMouseEvent(Component.java:5090)
at java.awt.Component.processEvent(Component.java:4890)
at java.awt.Container.processEvent(Container.java:1566)
at java.awt.Component.dispatchEventImpl(Component.java:3598)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Component.dispatchEvent(Component.java:3439)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450
)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3162)

    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095)
    at java.awt.Container.dispatchEventImpl(Container.java:1609)
    at java.awt.Window.dispatchEventImpl(Window.java:1585)
    at java.awt.Component.dispatchEvent(Component.java:3439)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh

read.java:197)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)

    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)

    at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)

java.lang.NullPointerException
at Retangulos$1.stateChanged(Retangulos.java:137)
at javax.swing.JSlider.fireStateChanged(JSlider.java:343)
at javax.swing.JSlider$ModelListener.stateChanged(JSlider.java:271)
at javax.swing.DefaultBoundedRangeModel.fireStateChanged(DefaultBoundedR
angeModel.java:346)
at javax.swing.DefaultBoundedRangeModel.setRangeProperties(DefaultBounde
dRangeModel.java:283)
at javax.swing.DefaultBoundedRangeModel.setValueIsAdjusting(DefaultBound
edRangeModel.java:212)
at javax.swing.JSlider.setValueIsAdjusting(JSlider.java:515)
at javax.swing.plaf.basic.BasicSliderUI$TrackListener.mouseReleased(Basi
cSliderUI.java:1303)
at java.awt.Component.processMouseEvent(Component.java:5093)
at java.awt.Component.processEvent(Component.java:4890)
at java.awt.Container.processEvent(Container.java:1566)
at java.awt.Component.dispatchEventImpl(Component.java:3598)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Component.dispatchEvent(Component.java:3439)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450
)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3165)

    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095)
    at java.awt.Container.dispatchEventImpl(Container.java:1609)
    at java.awt.Window.dispatchEventImpl(Window.java:1585)
    at java.awt.Component.dispatchEvent(Component.java:3439)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh

read.java:197)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)

    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)

    at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)[/code]

Aqui é o trecho do código que eu mudei pra ele dar esse erro:

[code] public void stateChanged(ChangeEvent evt)
{
if(radioUm.isSelected()==true)
RA = sliderRed.getValue();
if(radioDois.isSelected()==true)
RB = sliderRed.getValue();
sliderCyan.setValue(255);
repaint();

		}[/code]

Este NullPointerException acontece porque há alguma variavel no stateChanged que não foi inicializada.

Faça uns trace’s [System.out.println(“passei aqui”);]
e descubra qual ponto exato está dando o erro.

E veja se alguma das variaveis não foi inicializada.

Valeu? até mais… :wink: