0

我正在创建一个程序,用户可以在其中画线并擦除它们。我能够创建我的窗口并创建一个正常工作的 JMenuBar。未启用绘图功能时,一切都很好。但是当启用绘图功能时,第二个 JMenuBar 将绘制在原始下方。这个菜单栏不起作用,有时当它被绘制时,屏幕上的所有图形也会被重新绘制得更低。以任何方式重新调整窗口大小可以解决这些问题。

我会发布图片,但你知道,我是新用户,不能。

我已经能够将问题缩小到我的 paint() 方法中的一个点。需知:鼠标拖动时,调用repaint()方法。它使用我的 paint() 方法,该方法在我的 Line 类中调用 paintObject(Graphics g) 方法。JMenuBar 错误出现在顶级类中的绘制方法的 END 处。

public void paint(Graphics g)//paint() in the top class
{            
    for(int i = 0; i < objs.size(); i++)//Loop that finds all Tool(Line) objects that
        ((Tools)objs.get(i)).paintObject(g);//have been drawn, and redraws them.
    //This part of the code completes successfully with no error.

}//ERROR OCCURS HERE!!!!!!

我不知道为什么会这样。附带说明一下,屏幕上还有一个 JTextField,直到它被突出显示才会出现。谢谢你至少读到这里!

4

1 回答 1

2

编辑:我会冒险,我敢打赌你实际上是直接在顶层窗口(JFrame 或 JApplet 或 JDialog ...)上绘制的,并且也将鼠标侦听器添加到了这个窗口——因此组件的图纸翻译了一点。

解决方案是在尝试像这样相当复杂的事情之前先查看教程。他们将告诉您如何正确绘制,包括我在评论中给出的建议,例如在 JComponent 或 JPanel 的paintComponent方法中绘制,以及调用 super.paintComponent(g) 方法作为您的 paintComponent 覆盖的第一个方法调用。

于 2012-01-20T22:25:52.330 回答