我正在首次使用java圖像,並且在小程序加載時看到它們時出現問題。我在下面發佈的代碼是一個大幅縮減版本的代碼,我實際上正在處理,希望能夠弄清楚爲什麼我無法看到具有此代碼的圖像會顯示給我,而我必須調整窗口大小以查看圖像與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
}
}
顯然你沒有教我所有關於重寫paintComponent(),因爲我還在問問題。我不明白什麼可以從代碼中刪除,所以我留下了我認爲可能很重要的功能。在我拿出你在我們上次談話中推薦的所有東西之後,該程序沒有繪製任何東西,所以我不知道發生了什麼。我已經閱讀了swing教程,當我嘗試編譯示例代碼時,我得到了「使用或覆蓋已棄用的API」錯誤,因此在那裏沒有多大幫助。我感謝你試圖幫助我,但沒有人強迫你「浪費」你的時間。 – danwoods 2009-12-07 06:01:57
我的印象是,像這樣的代碼恰好就是當你說「創建一個簡單的自定義JPanel,它具有簡單的drawstring(...)並將其添加到JApplet並讓它首先工作時」。 (除了我需要畫一個圖像,而不是一個字符串,我不能得到它的工作,這就是爲什麼我問問題)... – danwoods 2009-12-07 06:04:13
你瞭解了paintComponent你的帖子:http:// stackoverflow。 COM /問題/ 1830603 /繪圖文本中之JPanel的。我還第二次向您介紹了定製繪畫的Swing教程。同樣,這裏的代碼看起來與「如何製作小程序」教程中的示例代碼完全不同。你聲稱這個代碼的問題是它不會顯示圖像,它甚至不會使用drawString(),所以你也忽略了這個建議。 – camickr 2009-12-07 06:18:10