我正在为大学做一些小的 Java 程序,我遇到了在更新后重绘一些图形的问题。这是上下文:
我有一个主要的 Jframe,它基本上包含两个东西,一个 JComponent 用于绘制/绘制一些图形(矩形、圆形等)和一个 JMenu 用于为用户提供排序选项。
JComponent 覆盖了 paintComponent,所以我可以根据要求绘制图形。 Graphics 是具有定义 Graphic 类型的方法的自定义类,每个类都将调用自己的 drawRect() 或 drawOval()。效果很好。如果我为主 JFrame 调用 repaint(),它将按预期调用 JComponent() 的 paintComponent。
JMenu 中的一个菜单具有按不同顺序对图形进行排序的选项。因此,在我的每个选项的 ActionListner 中,我继续对包含图形的 LinkedList 进行排序。
问题是当我在 ActionListener 中完成排序时,我会调用 repaint() 来绘制 JComponent 中的图形,但它会调用 JMenu 的 repaint() 而不是...所以我的问题是如何以某种方式从 JMenu 调用 JComponent 的重绘?
谢谢。
最佳答案
One of the menus in the JMenu has options to sort the Graphics per different order. So in my ActionListner of each options I proceed with the sort of the LinkedList containing the Graphics.
然后该代码应该在组件上调用 repaint()。也就是说 LinkList 应该是绘制图形的组件的一部分。因此,您将拥有在组件上调用的类似 sort(...)
的方法。然后该方法将进行排序,然后重新绘制()组件。
这是所有 Swing 方法的工作方式,例如 setText(...)
、setBackground(...)
。您在组件上调用这些方法,然后组件在自身上调用 repaint()
。
关于java - 调用其他组件的重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24090470/