2009-07-03 54 views
1

我必須創建一個特殊的TextFieldUI來繪製圖像作爲背景。該圖像包含一些alpha組件。但是,每當在該文本字段中寫入字符時,首先重繪背景並繪製字符。當背景不包含alpha組件時,這很好,但在輸入幾個字符後,alpha區域總計變爲黑色。Java在搖擺中採樣像素顏色

我可以看到這個的唯一方法是在TextfieldUI的paintBackground方法中(我重寫),我必須首先在該位置對背景的顏色進行採樣,繪製整個顏色的圖形組件,然後然後畫我的背景。

  1. 有沒有人知道如何抽樣像素的顏色,當我有權訪問的是Graphics對象?

  2. 有沒有更好的方式來繪製自定義圖像作爲文本框背景,而不是在TextfieldUI中重寫paintBackground?

感謝

回答

1

我以前沒有嘗試過,但Swing是建立在AWT的頂部,Robot類曾在AWT採樣特定像素

+0

所以,我想機器人類,它似乎工作,但我有得到正確的像素位置的問題。我嘗試了component.getSreenLocation(),並沒有給我正確的結果。有任何想法嗎? – Jon 2009-07-06 17:17:39

+0

這個工作完美,當我使用component.getLocationOnScreen()和採樣的像素在x-1,y-1 – Jon 2009-07-06 21:12:29

+0

我不確定,但我認爲存在相對座標與絕對座標的問題。你有可能以某種方式給它相對座標(例如,相對於這個特定的面板),然後是屏幕座標。, – Uri 2009-07-06 21:23:37

0

井的一種方式,我不知道在paintBackground方法中你的自定義代碼是什麼樣子,但是我會確保在繪製圖像之前填入文本字段背景。

我會讓你決定它的「更好」與否,但是你可以使用Background Panel,它允許你添加一個圖像到面板。然後,將文本字段添加到面板(文本字段自動變爲非透明,以便圖像顯示)。然後將面板添加到GUI。

如果這不起作用,那麼最好有一個代碼演示,以便我們可以看到實際發生的情況。

0

當你重寫paintBackground時,你首先調用超類的版本,對不對?它已經奠定了一個背景顏色的矩形,這將使您的圖像重新開始。

而不是「採樣」背景顏色,它可能已經是正確的(超類paintBackground代碼從父組件獲取它,如果不是本地設置)。如果該默認值不正確,請將其設置爲初始界面構造。 (你的領域沒有被對未知的純色等複雜的任意界面疊加,是嗎?)