如何更新Java swing背景图?

use*_*761 1 java user-interface swing event-handling draw

在此输入图像描述

在此输入图像描述

当您看到这些图片时,菜单项关闭后不会更新背景网格线和黑色矩形.我该如何更新?在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);          
  }      
}
Run Code Online (Sandbox Code Playgroud)

//感谢您的评论!! 这是要添加的事件处理程序. 必须将其添加到通过网格绘制的每个memu项目

private void jMenu2MenuDeselected(javax.swing.event.MenuEvent evt) {
    repaint();
}
Run Code Online (Sandbox Code Playgroud)

cam*_*ckr 6

不要覆盖paint()并调用super.paintComponents().

自定义绘制是通过覆盖JPanel(或JComponent)的paintComponent()方法完成的,然后调用super.paintComponent().

如果您需要更多帮助,请发布您的SSCCE以证明问题.