java - repaint() 方法会导致出现第二个非功能性 JMenuBar?

标签 java swing repaint jmenubar

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

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

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

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 重写的方法调用。

关于java - repaint() 方法会导致出现第二个非功能性 JMenuBar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8948614/

相关文章:

java - 在不知道操作系统的情况下从 java 启动命令行

java - 登录 Firebase Android 后获取 Uid

java - 导出java swing组件时IText忽略UTF-8字符

java - 为什么我的 JFrame 图像没有更改图标?

java - 无法更新 Java Swing 中的 JButton

java - ListView 不从 OnClickListener 重绘

java - 为什么我的面板重绘没有被调用?

java - JBoss EAP 7(beta) 找不到 tomcat jar

java - Apache Tika 和文档元数据

java - 将 JFrame 中的现有 JPanel 替换为另一个 JPanel 的正确方法是什么?