方法导致出现第二个非功能性的JMenuBar



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

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

我已经能够在paint()方法中将问题缩小到一个点。需要知道的是:拖动鼠标时,会调用repaint()方法。它使用我的paint()方法,该方法调用Line类中的paintObject(Graphics g)方法。JMenuBar错误出现在顶级中paint方法的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,它在高亮显示之前不会出现。谢谢你至少读到这里!

编辑:我会冒险,我敢打赌你实际上是直接在顶级窗口(JFrame、JApplet或JDialog…)上绘制的,并且已经将鼠标侦听器添加到该窗口中——因此组件的绘制会向下转换一点。

解决方案是,在尝试类似这样相当复杂的东西之前,先看一下教程。他们会告诉你如何正确绘制,包括我在评论中给出的建议,例如在JComponent或JPanel的paintComponent方法中绘制,并调用super.paintComponent(g)方法作为paintComponent覆盖的第一个方法调用。

相关内容

  • 没有找到相关文章