2009-12-07 70 views
-1

我正在首次使用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 

} 


} 

回答

1

這不是一個簡單的例子存在的代碼仍然辦法不多垃圾。例如,所有圖像過濾與顯示圖像有什麼關係?所有線程代碼與顯示圖像有什麼關係?

在我花了一個小時與你昨天教你繪畫的基本知識之後,你還沒有聽我說過的話。

我教你所有關於重寫paintComponent()。我向你指出了Swing tuturial,它有一個使用圖像的工作示例。你的applet的結構看起來不像本教程中的例子。你的例子會很簡單,因爲你不必擔心動畫。

你不僅昨天浪費了我的時間,而且知道你正試圖浪費別人的時間。

從教程中學習併發布正確的SSCCE。

+0

顯然你沒有教我所有關於重寫paintComponent(),因爲我還在問問題。我不明白什麼可以從代碼中刪除,所以我留下了我認爲可能很重要的功能。在我拿出你在我們上次談話中推薦的所有東西之後,該程序沒有繪製任何東西,所以我不知道發生了什麼。我已經閱讀了swing教程,當我嘗試編譯示例代碼時,我得到了「使用或覆蓋已棄用的API」錯誤,因此在那裏沒有多大幫助。我感謝你試圖幫助我,但沒有人強迫你「浪費」你的時間。 – danwoods 2009-12-07 06:01:57

+0

我的印象是,像這樣的代碼恰好就是當你說「創建一個簡單的自定義JPanel,它具有簡單的drawstring(...)並將其添加到JApplet並讓它首先工作時」。 (除了我需要畫一個圖像,而不是一個字符串,我不能得到它的工作,這就是爲什麼我問問題)... – danwoods 2009-12-07 06:04:13

+1

你瞭解了paintComponent你的帖子:http:// stackoverflow。 COM /問題/ 1830603 /繪圖文本中之JPanel的。我還第二次向您介紹了定製繪畫的Swing教程。同樣,這裏的代碼看起來與「如何製作小程序」教程中的示例代碼完全不同。你聲稱這個代碼的問題是它不會顯示圖像,它甚至不會使用drawString(),所以你也忽略了這個建議。 – camickr 2009-12-07 06:18:10

-1

答案正在改變將JPanel擴展到paintComponent()並將調用中的最後一個參數切換爲'this'而不是'null'的drawImage()的類中的draw()方法。立即完美工作!

+2

那麼爲什麼我的答案不被接受。我建議你多少次需要一個paintComponent()方法或使用「this」而不是「null」。 – camickr 2009-12-07 16:56:10