2012-02-21 62 views
1

enter image description here如何更新Java swing背景图纸?

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(); 
} 
+0

'MainDisplayForm mD = new MainDisplayForm();'这段代码应该做什么?通常,您不应该在'paint()'或'paintComponent()'方法中创建组件。什么是“MainDisplayForm”?并重申camickr提到的,为了更快地提供更好的帮助,请发布[SSCCE](http://sscce.org/)。 – 2012-02-21 16:31:57

回答

1

当菜单关闭时调用重新打印到窗口。

请勿拨打paint(getGraphics())。而是调用repaint(),因为这会通知超级组件它也需要重绘。

+0

是那个MenuCanceled(javax.swing.event.MenuEvent evt)? – user1098761 2012-02-21 16:25:36

+1

我从来没有这个问题,但我想这将是和菜单接受或选择的东西。你将不得不实现两者所以它会重绘当它被取消,当菜单被关闭,因为用户选择了一些东西。 – 2012-02-21 16:29:28

+0

好吧,我会尽快试用 – user1098761 2012-02-21 16:32:53

2

使用repaint()用于刷新每个菜单是项/更新组件。

何时使用repaint()

将某些组件添加到面板/框架或操纵某些组件后(例如,在Swing动画中更改组件的位置/属性时),请致电repaint(),它将为您完成这项工作。实际上,它触发调用组件的方法update()

+0

我已经尝试过了,但它在矩形后面绘制了菜单项并再次绘制它。我在屏幕上创建了菜单和鼠标移动事件的事件处理程序,但我不知道我使用的事件处理程序不是您提到的那个。谢谢。 – user1098761 2012-02-21 16:21:48

+0

@ user1098761你试过了什么?你可以添加一些代码给你的文章,显示你使用repaint()的地方吗? – Juvanis 2012-02-21 16:26:26

+0

我曾尝试过一些不同的事件处理程序。现在,它可以正常使用MenuDeselected(javax.swing.event.MenuEvent evt)。谢谢! – user1098761 2012-02-21 16:45:48

6

请勿重写paint()并调用super.paintComponents()。

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

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

+0

Thx评论!!! – user1098761 2012-02-21 16:32:41

+0

@ user1098761这不是任何形式的评论 – mKorbel 2012-02-21 16:45:49

+0

我试图用repaint()调用super.paintComponents()。这也解决了一些眨眼问题。谢谢! – user1098761 2012-02-21 18:15:20