Java JFrame / Canvas не перерисовывается - PullRequest
1 голос
/ 30 сентября 2011

Слушатель мыши вызывает repaint(), и я вижу, что он на самом деле проходит мимо рисованной части, потому что я вижу, что globalcounter увеличен в выводе System.out.println().Однако на экране я не вижу никаких изменений до тех пор, пока не сверну окно и не увеличу его снова, не изменим его размер или не переместлю его из видимой области экрана и не верну обратно. Очевидно, я бы хотел обновить его без моего вмешательства.

class GUI extends javax.swing.JFrame {
int globalcounter=0;
  class MyCanvas extends Canvas {

  @Override
  public void paint(Graphics g) {
    globalcounter++;
    g.drawString(globalcounter,100,100);
    System.out.println(globalcounter);
    }

  }
}

(Первоначально я загружал изображение из файла, который постоянно обновлялся (веб-камера), и рисовал его на холсте. Когда я частично перетаскивал его из видимой области экрана и обратно, детальто, что было «извне», было обновлено, остальные нет.)

revalidate() вместо repaint() ничего не изменилось.

Я знаю, что этот пост является дубликатом Java перерисовка не работает правильно но когда я разместил его там, он был удален.

1 Ответ

2 голосов
/ 30 сентября 2011

Почему вы добавляете компонент AWT, Canvas, в компонент Swing, JFrame? Вы должны придерживаться только компонентов Swing. А также знаете ли вы размер вашего MyCanvas и как вы добавили его в JFrame, когда этот код не отображается.

Рассмотрим

  • с использованием JPanel вместо объекта Canvas,
  • рисование в методе paintComponent,
  • показывает нам sscce , если вы все еще застряли.
  • А также, если все, что вы делаете - это рисование текста, используйте JLabel вместо рисования в paint / paintComponent и измените его текст с помощью метода setText (...).
...