2011-12-26 36 views
1

我想知道Java如何在屏幕上绘制JComponents?Java如何绘制JComponents?

我正在使用AspectJ来调用所有对Graphics2D方法的调用。例如,无论何时从应用程序调用Graphics2d.Draw(Shape),我都能捕获该调用。

Java是否使用Graphics类来绘制JComponents,让我们说JButtons?例如,我的应用程序上有一个JButton,我想捕获用于在屏幕上绘制JButton的图形类的方法?我不知道该怎么做。

任何想法?

更新: 我试着重写JButton类和PaintComponent方法。如果我这样做比我可以捕获到用于绘制JButton的Graphics方法的调用。

如何在不覆盖特定JComponent类的情况下捕获这些调用?

+0

您是使用call()还是execution()连接点来捕获这些调用?请提交您的AspectJ代码。 – 2011-12-28 15:37:34

+0

我猜AspectJ weaver无法访问图形2D外部库(因为它是一个外部库),所以不会执行编织。当您在代码上覆盖方法时,AspectJ可以访问代码并执行编织。图形2D的库可能不在ajc编译器的内部路径中。 – 2011-12-28 15:46:17

回答

1

yourJButton.repaint();导致swing调用paint()方法。您不应该直接调用paint,而应该使用repaint方法来调度组件以进行绘制。此方法实际上将绘画工作委托给三个受保护的方法:paintComponent,paintBorder和paintChildren。

+0

谢谢Travis.I了解你。每个JButton类都有一个paintComponent方法。为了绘制按钮,这个方法从Graphics类调用了一些方法,比如drawLine,setColor等。我想捕获这些调用Graphics方法。我有创建一个新的按钮JButton myBtn = new JButton();我将它附加到一个面板上,并且当它被绘制在屏幕上时,我想捕获对Graphics类方法的调用。如果我扩展JButton类并覆盖paintComponent方法,那么我可以捕获对Graphics类方法的调用,eventhoug我不会自己调用paintComponent。 – Gonny 2011-12-27 07:54:18