开发者

Added BufferedImage is only 2x2 pixels

I have a script that cycles (almost like a slideshow) through a Vector object (flipBook), using a Thread (animationThread), and adds them to a JPanel. However, the added image is only 2x2 pixels large. I've verified the images are 50x50, but they don't appear to be properly showing.

Here's some of the code going on behind the 开发者_JAVA技巧Thread instance. I'm not entirely sure which code would be beneficial for finding the source for.

public void startThread() {
    if (flipWidth != 0 && flipHeight != 0) {
        System.out.println("[ AnimationAsset ] " + "We're starting the thread");
        Runnable r = new Runnable() {
            @Override
            public void run() {
                runWork();
            }           
        };
        animationThread = new Thread(r, "AnimationThread");
        animationThread.start();
        going = true;
    }
}
private void runWork() {
    try {
        while (going) {
            repaint();
            flipIndex = (flipIndex + 1) % numFlips;
            System.out.println("[ AnimationAsset ] flipIndex: " + flipIndex);
            Thread.sleep(1000);
        }
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        System.out.println("[ AnimationAsset ] " + "Interrupted");
    }
}
public void paint(Graphics g) {
    update(g);
}
public void update(Graphics g) {
    System.out.println("[ AnimationAsset ] " + flipIndex);
    ((Graphics2D) g).drawImage(flipBook.get(flipIndex), null, 5, 5);

}


and adds them to a JPanel

This is not a Swing code. This is AWT code.

You would never override the update() and paint() methods this way when using Swing. Get rid of this code and start over.

To do this in Swing I would use a JLabel with an Icon and add the label to the frame.

Then, to do animation in SWing your should use a Swing Timer.

When the timer fires you simply use the setIcon(...) method of the label to replace the old icon with your new icon.


Emm you have a strange drawing code as

((Graphics2D) g).drawImage(flipBook.get(flipIndex), null, 5, 5);

You can see the docs here... to use Graphic2D drawImage() method right

the most common way of image drawing is to paint image right on JComponent, as a rule, the JLabel. Here is a component example

public class MyLabel extends JLabel
{

private Image image;

public MyLabel(Image image)
{

this.image=image;

}

public void paintComponent(Graphics g)
{

  g.drawImage(this.image,x,y,width,height,null);

}

}

so here you can use the component as a common swing object

public class MyPanel extends JPanel
{
 public MyPanel()
{
  Image image=null;
 try{
  image=ImageIO.read(new File("image.png"));
  }
 catch (IOException e) {
 }

  this.add(new MyLabel(image));

}

}

Good luck

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜