Добавлен BufferedImage только 2x2 пикселей - PullRequest
1 голос
/ 07 августа 2011

У меня есть скрипт, который циклически (почти как слайд-шоу) просматривает объект Vector (flipBook), используя Thread (animationThread), и добавляет их в JPanel.Однако добавленное изображение имеет размер всего 2x2 пикселя.Я проверил, что изображения 50х50, но они не отображаются должным образом.

Вот часть кода, который происходит за экземпляром Thread.Я не совсем уверен, какой код будет полезен для поиска источника.

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);

}

Ответы [ 2 ]

3 голосов
/ 07 августа 2011

и добавляет их в JPanel

Это не код Swing.Это код AWT.

При использовании Swing вы никогда не изменили бы методы update () и paint () таким образом.Избавьтесь от этого кода и начните заново.

Чтобы сделать это в Swing, я бы использовал JLabel со значком и добавил метку к фрейму.

Затем, чтобы сделать анимацию в SWingследует использовать Swing Timer .

Когда таймер срабатывает, вы просто используете метод setIcon (...) метки, чтобы заменить старый значок новым.

1 голос
/ 07 августа 2011

Эмм, у вас странный код для рисования:

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

Здесь вы можете увидеть документы ... , чтобы использовать метод Graphic2D drawImage () right

Наиболее распространенный способ рисования изображения - это рисование изображения прямо на JComponent, как правило, на JLabel.Вот пример компонента

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);

}

}

, поэтому здесь вы можете использовать компонент в качестве обычного объекта свинга

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));

}

}

Удачи

...