Its driving me crazy....drawImage() help please
Hi guys ..
a set of fresh eyes is all I need...
In the following program its very simple, but I can't make it work..
I want to draw a simple image over a background ...
the thing is it DOESN'T work, it only loads the image if I click on the frame or resize it....if I take all the listeners out then it doesn't show a thing..........
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.util.Properties;
import java.io.*;
import java.util.StringTokenizer;
import java.util.Vector;
public class l extends JPanel implements MouseMotionListener, MouseListener
{
private BufferedImage offscreenBuffer;
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image backgroundImage,image1;
public l(){
//BufferedImage.TYPE_4BYTE_ABGR
this.offscreenBuffer = new BufferedImage(800, 400, BufferedImage.TYPE_3BYTE_BGR);
this.paintNoComponent();
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
public void paintNoComponent()
{
paintComponent(this.getGraphics());
}
public void paintOffscreen(Graphics g)
{
if(g == null)
{
return;
}
//g.setColor(backgroundColor);
g.fillRect(0, 0, getWidth(), getHeight());
backgroundImage=toolkit.getImage("kj.png");
g.drawImage(backgroundImage, 0, 0, this);
image1 = toolkit.getImage("t18.png");
g.drawImage(image1,0,0,this);
}
public void paintComponent(Graphics g)
{
if(g == null)
{
return;
}
paintOffscreen(offscreenBuffer.getGraphics());
g.drawImage(offscreenBuffer, 0, 0, null);
System.out.println("-X->>");
}
//MouseListener methods
public void mousePressed(MouseEvent me)
{
int col = (me.getX()-20)/45;
int row = (me.getY()-20)/45;
System.out.println(col+" "+row);
if(row < 0 || col < 0 || row > 7 || col > 7)
{
return;
}
}
public void mouseReleased(MouseEvent me)
{
paintNoComponent();
}
public void mouseClicked(MouseEvent me)
{
}
//MouseMotionListener methods
public void mouseMoved(MouseEvent me)
{
}
public void mouseDragged(MouseEvent me)
{
int movingX = me.getX();
int movingY = me.getY();
paintNoComponent();
}
public void mouseEntered(MouseEvent me)
{
}
public void mouseExited(MouseEvent me)
{
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.util.Properties;
import java.io.*;
class tetframe
{
public static void main (String args[])
{
JFrame frame=new JFrame();
//toSee nt=new toSee();
l nt=new l();
frame.getContentPane().add(nt);
frame.setSize(810,420);
frame.setVisible(true);
}
}
[3099 byte] By [
Java_seeda] at [2007-11-27 3:57:04]

# 1
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.event.*;
import javax.swing.*;
public class LRx extends JPanel implements MouseMotionListener, MouseListener
{
private BufferedImage offscreenBuffer;
Image backgroundImage,image1;
public LRx()
{
loadImages();
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
private void loadImages()
{
Toolkit toolkit = Toolkit.getDefaultToolkit();
// See Toolkit getImage Method Detail for why
// creatImage may be a better choice here.
backgroundImage=toolkit.createImage("kj.png");
//"images/owls.jpg");
image1 = toolkit.createImage("t18.png");
//"images/Bird.gif");
// Load the data for the images.
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(backgroundImage, 0);
tracker.addImage(image1, 0);
try
{
tracker.waitForAll();
}
catch(InterruptedException e)
{
System.out.println("interrupted");
}
}
private void initOffscreenBuffer()
{
//BufferedImage.TYPE_4BYTE_ABGR
int w = getWidth();
int h = getHeight();
int type = BufferedImage.TYPE_3BYTE_BGR;
this.offscreenBuffer = new BufferedImage(w, h, type);
Graphics g = offscreenBuffer.getGraphics();
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
g.drawImage(backgroundImage, 0, 0, this);
g.drawImage(image1,0,0,this);
g.dispose();
}
protected void paintComponent(Graphics g)
{
if(offscreenBuffer == null)
{
// We know we have a good width/height for this
// component available on the first trip thru
// this method. So this is a good place to
// initialize an offscreenBuffer.
initOffscreenBuffer();
}
// For drawing an offscreenImage this is all that
// you have to do in this method.
g.drawImage(offscreenBuffer, 0, 0, null);
System.out.println("-X->>");
}
/** Call this from your event code. */
private void updateOffscreenBuffer() {
Graphics g = offscreenBuffer.getGraphics();
// Here you can set the background color and fill it to
// start over or you can draw new things on the image.
g.dispose();
}
//MouseListener methods
public void mousePressed(MouseEvent me)
{
int col = (me.getX()-20)/45;
int row = (me.getY()-20)/45;
System.out.println(col+" "+row);
if(row < 0 || col < 0 || row > 7 || col > 7)
{
return;
}
}
public void mouseReleased(MouseEvent me) {}
public void mouseClicked(MouseEvent me){}
//MouseMotionListener methods
public void mouseMoved(MouseEvent me){}
public void mouseDragged(MouseEvent me)
{
int movingX = me.getX();
int movingY = me.getY();
// Update the buffer if you want
// updateOffscreenImage();
// Or you can change member variables that will be
// drawn in paintComponent, on top-of/above the image.
// Then just redraw:
// Tell this component to repaint itself.
repaint();
}
public void mouseEntered(MouseEvent me) {}
public void mouseExited(MouseEvent me) {}
public static void main (String args[])
{
JFrame frame=new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//toSee nt=new toSee();
LRx nt=new LRx();
frame.getContentPane().add(nt);
frame.setSize(810,420);
frame.setVisible(true);
}
}