Как обновить фоновые рисунки свинга Java? - PullRequest
1 голос
/ 21 февраля 2012

enter image description here

enter image description here

Как вы видите это изображение, линии сетки фона и черный прямоугольник не обновляются после закрытия пункта меню. Как я могу обновить его? В C # есть обработчик событий для автоматического обновления, но я новичок в Java Swing GUI-приложении.

Вот код:

public void paint(Graphics g) {

  super.paintComponents(g); 

  MainDisplayForm mD = new MainDisplayForm();           


  Graphics2D g2 = (Graphics2D) g;  

  g2.setColor(Color.BLACK);
  int gridWidth = 1240;
  int gridHeight = 400;      
  g2.fillRect(20, 50, gridWidth, gridHeight);


  g2.setColor(Color.darkGray);

  paintGrid(g2,gridWidth, gridHeight);

  g2.setColor(Color.red);
  Line2D line = new Line2D.Float(20, 50, 250, 260);               
  g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  //g2.draw(line); //pending       

  g2.dispose();

}

private void paintGrid(Graphics g, int gridWidth, int gridHeight)
{

  for(int i=20; i<gridWidth+20; i=i+10)
  {      
      g.drawLine(i, 50, i, gridHeight+49);          
  }      

  for(int i=50; i<gridHeight+50; i=i+10)
  {      
      g.drawLine(20, i, 1259, i);          
  }      
}

// Спасибо за комментарии !! Вот обработчик события, чтобы добавить. Это необходимо добавить к каждому элементу памяти, нарисованному над сеткой

private void jMenu2MenuDeselected(javax.swing.event.MenuEvent evt) {
    repaint();
}

Ответы [ 3 ]

6 голосов
/ 21 февраля 2012

Не переопределяйте paint () и вызывайте super.paintComponents ().

Настраиваемое рисование выполняется путем переопределения метода paintComponent () в JPanel (или JComponent), после чего вы вызываете super.paintComponent ().

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

2 голосов
/ 21 февраля 2012

Используйте repaint() для обновления / обновления компонентов.

Когда использовать repaint()?

После добавления некоторых компонентов на панель / фрейм или манипулирования некоторыми компонентами, например, когда вы изменяете расположение / свойства компонентов в анимации Swing, вызовите repaint(), и он выполнит эту работу за вас. На самом деле, он вызывает вызов для update() метода вызывающего компонента.

1 голос
/ 21 февраля 2012

Когда меню закрыто, вызовите повторную печать в окне.

Не звоните paint(getGraphics()).Вместо этого вызовите repaint(), потому что это информирует суперкомпонент о необходимости перерисовки.

...