Обновите BufferedImage в JFrame - PullRequest
       31

Обновите BufferedImage в JFrame

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

У меня есть BufferedImage, отображаемый в JFrame через мой собственный класс.Я решил отобразить BufferedImage, используя свой собственный класс, чтобы я мог масштабировать его.Мой paintComponent и обновление

public class MyBuffIm{
public void paintComponent(Graphics canvas) {
    if (bi == null) {
    } else {
        //bi, maxWidth, and maxHeight were passed to constructor
        canvas.drawImage(bi, 0, 0, maxWidth, maxHeight, null);
    }
}

public void update(Graphics canvas) {
    super.update(canvas);
    if(bi != null){
        //Got this from some tutorial in the net.
        //Done out of desperation :|
        paintComponent(bi.getGraphics());
    }
}
}

Я переопределил обновление, так как документы говорят что-то вроде: «Если этот компонент не является легким компонентом, AWT вызывает метод обновления в ответ на вызов для перерисовки».Я не совсем уверен, является ли мой компонент легковесным или нет.

В любом случае в моем Runnable есть следующий код (не работает, как я ожидаю):

BufferedImage p = SomeMyBuffIm.getBuffIm();
Vector<Point> randomPixels = getRandomPixels(500);
int limit = randomPixels.size()
for (i = 0; i < limit; i++) {
    Point rp = randomPixels.get(i)
    p.setRGB(rp.x, rp.y, Color.red.getRGB());
}
SomeMyBuffIm.repaint();
mainFrame.repaint(); //JFrame call to repaint

Мне бы хотелось думать, что, поскольку я масштабирую свое изображение, я просто не могу различить разницу между новым и старым изображениями.Но я пробовал самые большие значения для getRandomPixels до сих пор безрезультатно.Кстати, мое тестовое изображение - просто белый лист, поэтому в нем должны выделяться красные пиксели.

Что-то не так я делаю?

1 Ответ

2 голосов
/ 15 августа 2011

Я переопределил обновление, поскольку в документах говорится что-то вроде: «Если этот компонент не является легковесным компонентом, AWT вызывает метод update в ответ на вызов перерисовки». Я не совсем уверен, легок ли мой компонент или нет.

Нет, вы НЕ должны переопределять update (). Вы сделали бы это с AWT, но не с Swing.

Если вы обновите BufferedImage, то все, что вам нужно сделать, это вызвать repaint () для вашего экземпляра класса MyBuffin.

Если вам нужна дополнительная помощь, чем опубликовать свой SSCCE , который демонстрирует проблему.

...