Erro repaint(); changelistener

3 respostas
Ricardo_Alexsander

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.

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);
	}
}

3 Respostas

keller

Qual erro acontece? onde acontece? porque acontece?

Ricardo_Alexsander
gui:
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)

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)

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

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

			}
keller

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:

Criado 31 de março de 2005
Ultima resposta 31 de mar. de 2005
Respostas 3
Participantes 2