我第一次使用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
}
}
答案 0 :(得分:1)
这不是一个简单的例子,在代码中仍有很多垃圾。例如,所有图像过滤与显示图像有什么关系?所有线程代码与显示图像有什么关系?
昨天和你一起花了一个小时教你画画的基本知识,你没听过我说的话。
我教你们所有关于重写paintComponent()的事情。我向你指出了Swing tuturial,它有一个使用图像的工作示例。 applet的结构与教程中的示例完全不同。您的示例将非常简单,因为您不必担心动画。
你不仅浪费我昨天的时间,而且知道你正试图浪费别人的时间。
从教程中学习并发布适当的SSCCE。
答案 1 :(得分:-1)
答案是改变类中的draw()方法,该方法将JPanel扩展为paintComponent(),并将对drawImage()的调用中的最后一个参数切换为'this'而不是'null'。立即完美地工作!