2009-12-07 12 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를 오버라이드 (override)에 대해 모든 것을 가르쳐(). 나는 당신에게 이미지를 사용하는 실용 예제가있는 Swing tuturial을 지적했다. 애플릿의 구조는 튜토리얼의 예와 같이 보이지 않습니다. 애니메이션에 대해 걱정할 필요가 없으므로 예제가 훨씬 간단 해집니다.

당신은 어제 내 시간을 낭비하지만, 다른 사람들의 시간을 낭비하려고 알지 못했다뿐만 아니라.

튜토리얼에서 배우고 적절한 SSCCE를 게시하십시오.

+0

필자는 여전히 질문하는 중 paintComponent()를 재정의하는 것에 대해 저에게 모두 가르쳐주지 않았습니다. 나는 코드에서 제거 할 수있는 것이 무엇인지 이해하지 못하므로 중요한 것으로 생각되는 기능을 남겨 둡니다. 마지막 대화에서 추천 한 모든 것을 꺼낸 후에도 프로그램에서 아무 것도 그리지 않으므로 어떤 일이 일어나는지 전혀 알지 못합니다. 스윙 튜토리얼을 읽었으며 샘플 코드를 컴파일하려고 할 때 "사용되지 않거나 사용되지 않는 API"오류가 발생하므로 많은 도움이되지 않습니다. 나를 도우려는 것에 감사 드리지만 아무도 나를 낭비하지 않아도됩니다. – danwoods

+0

나는이 코드가 "간단한 drawSTring (...)을 가진 간단한 사용자 정의 JPanel을 만들고이를 JApplet에 추가 한 다음 그 코드를 먼저 사용한다고 말한 것"이라고 생각했다. (단, 문자열이 아닌 이미지를 그려야하고, 나는 그것이 작동하지 않게되어서 질문을 던지고있다.) ... – danwoods

+1

게시자가 게시 한 내용 : http : // stackoverflow. com/questions/1830603/drawing-text-within-a-jpanel. 또한 커스텀 페인팅에 대한 스윙 튜토리얼을 두 번째 소개했습니다. 여기서도 코드는 "애플릿을 만드는 방법"튜토리얼의 예제 코드처럼 보이지 않습니다. 이 코드의 문제는 이미지를 표시하지 않는다는 것입니다. 물론 drawString()에서도 작동하지 않으므로 그 제안을 무시한 것입니다. – camickr

-1

대답은 paintComponent에 (에 JPanel의 확장 클래스에 무승부() 메소드를 변경)하고 '이'대신에 '널 (NULL)'()의 drawImage에 대한 호출 마지막 파라미터를 전환한다. 즉시 그리고 완벽하게 일했습니다!

+2

그럼 왜 내 대답을 받아 들일 수 없습니다. paintComponent() 메서드가 필요하거나 "null"대신 "this"를 사용하도록 제안한 횟수. – camickr

관련 문제