2011-12-26 37 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