繁体   English   中英

调用其他组件的重绘

[英]Call repaint of an other Component

我正在为大学做一些小型Java程序,并且在更新后我遇到了重绘某些图形的问题。 这是上下文:

我有一个主Jframe,它基本上包含两个东西,一个用于绘制/绘制一些图形(矩形,圆形等)的JComponent和一个用于为用户提供排序选项的JMenu。

JComponent会覆盖paintComponent,因此我可以根据请求绘制Graphics。 图形是海关类,其中包含定义Graphic类型的方法,每个类都将调用自己的drawRect()或drawOval()。 这非常有效。 如果我为主JFrame调用repaint(),它将按预期调用JComponent()的paintComponent。

JMenu中的一个菜单具有按不同顺序对图形进行排序的选项。 所以在我的每个选项的ActionListner中,我继续使用包含Graphics的LinkedList。

问题是当我在ActionListener中完成排序时,我会调用repaint()在JComponent中绘制Graphics但它会调用JMenu的repaint()而不是...所以我的问题是如何以某种方式调用从JMenu重绘JComponent?

谢谢。

JMenu中的一个菜单具有按不同顺序对图形进行排序的选项。 所以在我的每个选项的ActionListner中,我继续使用包含Graphics的LinkedList。

然后该代码应该调用组件上的repaint()。 那就是LinkList应该是绘制Graphics的组件的一部分。 所以你会在组件上调用sort(...)这样的方法。 然后该方法将进行排序,然后重新绘制()组件。

这是所有Swing方法的工作方式,如setText(...)setBackground(...) 您在组件上调用这些方法,然后组件在其自身上调用repaint()

关键是要确保调用代码对被调用代码的被查看对象有一个干净的引用。 换句话说,菜单的监听器代码需要引用绘图JComponent,通常放在监听器类的字段中。 如何传递它取决于程序的结构。 这可以通过构造函数参数完成,或者如果您想通过依赖注入更清洁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM