애플릿이로드 될 때 처음으로 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()를 재정의하는 것에 대해 저에게 모두 가르쳐주지 않았습니다. 나는 코드에서 제거 할 수있는 것이 무엇인지 이해하지 못하므로 중요한 것으로 생각되는 기능을 남겨 둡니다. 마지막 대화에서 추천 한 모든 것을 꺼낸 후에도 프로그램에서 아무 것도 그리지 않으므로 어떤 일이 일어나는지 전혀 알지 못합니다. 스윙 튜토리얼을 읽었으며 샘플 코드를 컴파일하려고 할 때 "사용되지 않거나 사용되지 않는 API"오류가 발생하므로 많은 도움이되지 않습니다. 나를 도우려는 것에 감사 드리지만 아무도 나를 낭비하지 않아도됩니다. – danwoods
나는이 코드가 "간단한 drawSTring (...)을 가진 간단한 사용자 정의 JPanel을 만들고이를 JApplet에 추가 한 다음 그 코드를 먼저 사용한다고 말한 것"이라고 생각했다. (단, 문자열이 아닌 이미지를 그려야하고, 나는 그것이 작동하지 않게되어서 질문을 던지고있다.) ... – danwoods
게시자가 게시 한 내용 : http : // stackoverflow. com/questions/1830603/drawing-text-within-a-jpanel. 또한 커스텀 페인팅에 대한 스윙 튜토리얼을 두 번째 소개했습니다. 여기서도 코드는 "애플릿을 만드는 방법"튜토리얼의 예제 코드처럼 보이지 않습니다. 이 코드의 문제는 이미지를 표시하지 않는다는 것입니다. 물론 drawString()에서도 작동하지 않으므로 그 제안을 무시한 것입니다. – camickr