Olá pessoal,
Eu estou fazendo uma aplicação em que irá prescisar de fazer um labirinto e o usuário deve pegar o mouse e arrastar ate a saida.
O JFrame ao inicializar aparece certo, mas ao arrastar o mouse em cima do labirinto o programa da erro, e nada é escrito, segue-se abaixo o codigo:
Por favor alguém me ajude:
O grande problema que eu não sei o q esta errado, então se alguem souber por favor me ajude.
package LadiPackage;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.Point;
import java.awt.event.MouseEvent;
import javax.swing.event.MouseInputAdapter;
public class Teste2
{
public static void main(String[] args)
{
FreeHand freeHand = new FreeHand();
DrawingListener listener = new DrawingListener(freeHand);
freeHand.addMouseListener(listener);
freeHand.addMouseMotionListener(listener);
JFrame MainFrame = new JFrame();
MainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MainFrame.getContentPane().add(freeHand.getColorPanel(), "North");
MainFrame.getContentPane().add(freeHand);
MainFrame.getContentPane().add(freeHand.getControlPanel(), "South");
MainFrame.setSize(600,400);
MainFrame.setLocation(200,200);
MainFrame.setVisible(true);
}
}
public class FreeHand extends JPanel
{
BufferedImage image;
Color color;
Stroke stroke;
JLabel CoordenadasDoMouse;
private Image BackugroundImage;
private boolean Inicializadora;
public FreeHand()
{
color = Color.blue;
stroke = new BasicStroke(1f, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER);
this.initialize();
}
/*
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
if(image == null)
initImage();
g.drawImage(image, 0, 0, this);
}
*/
public void draw(Point start, Point end)
{
Graphics2D g2 = image.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(color);
g2.setStroke(stroke);
g2.draw(new Line2D.Double(start, end));
g2.dispose();
repaint();
}
private void clearImage()
{
Graphics g = image.getGraphics();
g.setColor(getBackground());
g.fillRect(0, 0, image.getWidth(), image.getHeight());
g.dispose();
repaint();
}
private void initImage()
{
int w = getWidth();
int h = getHeight();
image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
g2.setPaint(getBackground());
g2.fillRect(0,0,w,h);
g2.dispose();
}
protected void initialize()
{
this.BackugroundImage = this.getImage("/LadiPackage/resources/Teste2/imagem_teste2_labirinto.jpg");
this.setLayout(new BorderLayout());
}
public Image getImage(String path)
{
URL imageURL = getClass().getResource(path);
if (imageURL == null)
return null;
return new ImageIcon(imageURL).getImage();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
if( !Inicializadora )
{
Inicializadora = true;
Dimension dDesktop = this.getSize();
double width = dDesktop.getWidth();
double height = dDesktop.getHeight();
Image background = new ImageIcon(this.BackugroundImage.getScaledInstance(
(int) width, (int) height, 1)).getImage();
g.drawImage(background, 0, 0, this);
}
else
{
if(image == null)
initImage();
g.drawImage(image, 0, 0, this);
}
}
/**
*
* @param freeHand
* @return
*/
protected FreeHand getDrawPanel( FreeHand freeHand )
{
return freeHand;
}
protected JPanel getColorPanel()
{
Color[] colors = {
Color.red, Color.green.darker(), Color.blue, Color.orange
};
ActionListener l = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JButton button = (JButton)e.getSource();
color = button.getBackground();
}
};
JPanel panel = new JPanel(new GridLayout(1,0));
for(int j = 0; j < colors.length; j++)
{
JButton button = new JButton(" ");
button.setFocusPainted(false);
button.setBackground(colors[j]);
button.addActionListener(l);
panel.add(button);
}
return panel;
}
protected JPanel getControlPanel()
{
JButton clear = new JButton("clear");
clear.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
clearImage();
}
});
final JSlider slider = new JSlider(JSlider.HORIZONTAL, 1, 6, 1);
slider.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent e)
{
float value = ((Integer)slider.getValue()).floatValue();
stroke = new BasicStroke(value, BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER);
}
});
JPanel panel = new JPanel();
panel.add( insereLabelDeTextoCoordenadas() );
panel.add( insereLabelCoordenadas() );
panel.add(new JLabel("stroke"));
panel.add(slider);
panel.add(clear);
return panel;
}
/* insere o Labels de coordenadas do mouse */
private JLabel insereLabelDeTextoCoordenadas()
{
javax.swing.JLabel TextoCoordenadas;
TextoCoordenadas = new JLabel();
TextoCoordenadas.setText("Mouse Coordenadas: ");
return TextoCoordenadas;
}
/* insere o Label que contem as coordenadas do mouse */
private JLabel insereLabelCoordenadas()
{
CoordenadasDoMouse = new JLabel("");
return CoordenadasDoMouse;
}
/* seta um texto no Label MouseCoordenadas */
public void setTextJLabelMouseCoordenadas( String str )
{
CoordenadasDoMouse.setText(str);
}
}
public class DrawingListener extends MouseInputAdapter
{
FreeHand freeHand;
Point start;
public DrawingListener(FreeHand fh)
{
this.freeHand = fh;
}
public void mousePressed(MouseEvent e)
{
start = e.getPoint();
}
@Override
public void mouseDragged(MouseEvent e)
{
Point p = e.getPoint();
freeHand.draw(start, p);
start = p;
mouseMoved(e); // atualiza as coordenadas do mouse
}
/* atualiza as coordenadas do mouse na tela */
public void mouseMoved(java.awt.event.MouseEvent evt)
{
String string = "(" + Integer.toString(evt.getX()) + ", "
+ Integer.toString(evt.getY()) + ")";
freeHand.setTextJLabelMouseCoordenadas(string);
}
}
O erro que aparece é este:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at LadiPackage.FreeHand.draw(FreeHand.java:59)
at LadiPackage.DrawingListener.mouseDragged(DrawingListener.java:236)
Por favor alguém me ajude…
Desde já agradeço.