簡體   English   中英

如何在不繼承 Java 組件的情況下更改它的顏色或邊界?

[英]How can I change the color or bounds of a Java Component without subclassing it?

我正在使用 Java計時框架來執行動畫。 我想要的是能夠在AWTSwing組件上執行一些動畫而無需對其進行子類化。 我感興趣的動畫包括改變邊界、顏色或 alpha。 網上有很多關於如何對Component進行子類化,然后覆蓋paint(Graphics)方法以執行此類更改的示例,但是我想找到一種不同的方法。

我嘗試通過調用獲取Component的圖形

Graphics2D g2d = (Graphics2D) component.getGraphics();

然后對其進行操作 - 例如設置 alpha 值:

AlphaComposite newComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, newVal);
g2d.setComposite(newComposite);
component.repaint();

然而這沒有任何作用。 我嘗試過其他方法 - 例如使用自定義TimingTarget s 或PropertySetter s,但我沒有任何運氣。 正確的做法是什么?

為了給這個問題提供更多的上下文,這是我的javaQuery庫,它是jQueryJava 的一個端口,並且是在我之前的項目(帶有工作動畫) droidQuery 之后建模的

使用搖擺(或 JFX)。 由於 AWT 使用本機平台組件,因此它很舊且可定制性較低:將每個 Java AWT 組件與本機組件對等。

有了邊界,我假設邊界您可以設置邊界(甚至是附加的)和顏色。 setOpaque(false)允許透明。

永遠不應該獲取組件的 Graphics。 組件在明確定義的上下文中接收繪制事件:事件處理線程上的單線程、剪切、定位等。

所以使用組件的設置器,如果需要則invalidate . And possibly a . And possibly a重繪(50L)`。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM