图像不显示在简单的小程序中

时间:2009-12-07 04:00:38

标签: java image applet

我第一次使用java图像,并且在加载applet时遇到问题。我在下面发布的代码是我正在使用的代码的一个显着减少的版本,希望弄清楚为什么我看不到带有此代码的图像会显示我,而我必须调整窗口大小才能看到this code的图片。非常感谢所有帮助,并提前致谢谢谢:)

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import java.util.*;
import java.awt.Graphics;


public class example extends JApplet implements Runnable
{


boolean updating;
Thread thread;
private int width, height;

TestImageDraw aTable;       //used to create and store values


private AudioClip[] sounds = new AudioClip[4];    //array to hold audio clips
private int counter = 0;            //counter for audio clip array

private Image GameImage;
private Graphics GameGraphics;


public example() //set up applet gui
{

    this.resize(new Dimension(600, 500));


    //setup table
        //aTable = new Table(50, 50, 50, 50, 16, 16, getImage("images/FLY.gif", Color.white),
                //getImage("images/FlySwatter.gif", Color.white));  //Table must be square or flyswatter wont move straight

  aTable = new TestImageDraw(getImage("images/FLY.gif", Color.white));

  //this.add(aTable);
        super.resize(800, 600);

        repaint();

}

public void init()
{
    width = getSize().width;
    height = getSize().height;
    GameImage = createImage(width, height);
    GameGraphics = GameImage.getGraphics();
    // Automatic in some systems, not in others
    GameGraphics.setColor(Color.black);

  repaint();
      validate();

}



public void start()
{
    thread = new Thread(this);
    thread.start();

    }

public void stop()
{
    updating = false;
}

public void run()
{
    while(updating)
    {
        //aTable.update();
}
aTable.revalidate();
}

//returns a transparent image.
//color is made transparent
private Image getImage(String imgPath, final Color color)
{
    Image img = Toolkit.getDefaultToolkit().getImage(imgPath);

    ImageFilter filter = new RGBImageFilter() {
        // the color we are looking for... Alpha bits are set to opaque
        public int markerRGB = color.getRGB() | 0xFFFFFF;

        public final int filterRGB(int x, int y, int rgb) {
          if ( ( rgb | 0xFF000000 ) == markerRGB ) {
            // Mark the alpha bits as zero - transparent
            return 0x00FFFFFF & rgb;
            }
          else {
            // nothing to do
            return rgb;
            }
          }
        };
        ImageProducer ip = new FilteredImageSource(img.getSource(), filter);
        img = Toolkit.getDefaultToolkit().createImage(ip);

        return img;
}


}

TestImageDraw.java

import java.awt.*;  
  import java.util.Random;  
  import javax.swing.*;  

public class TestImageDraw extends JPanel
{

Image itemImg; // stores the item image

public TestImageDraw(Image itemImg)
{

    this.itemImg = itemImg;

}


/** Description of draw(Graphics g)
*
* Function draws the lines used in the table
* @param g  object used to draw the table
* @return   none
*/
public void draw(Graphics g)
{
  Graphics2D g2=(Graphics2D)g;
  //draw flyswatter
  drawValues(g2);   //draw values

    }

    private void drawValues(Graphics g)
{

    g.drawImage(itemImg,20,140,30,40, null);

      g.setColor(Color.black);  // set color of table to black

}


}

2 个答案:

答案 0 :(得分:1)

这不是一个简单的例子,在代码中仍有很多垃圾。例如,所有图像过滤与显示图像有什么关系?所有线程代码与显示图像有什么关系?

昨天和你一起花了一个小时教你画画的基本知识,你没听过我说的话。

我教你们所有关于重写paintComponent()的事情。我向你指出了Swing tuturial,它有一个使用图像的工作示例。 applet的结构与教程中的示例完全不同。您的示例将非常简单,因为您不必担心动画。

你不仅浪费我昨天的时间,而且知道你正试图浪费别人的时间。

从教程中学习并发布适当的SSCCE。

答案 1 :(得分:-1)

答案是改变类中的draw()方法,该方法将JPanel扩展为paintComponent(),并将对drawImage()的调用中的最后一个参数切换为'this'而不是'null'。立即完美地工作!