2010-07-23 101 views
1

我創建了一個子類的一個JRadioButton我在其中覆蓋paintComponent方法,像這樣:如何自定義JRadioButton的渲染?

@Override 
protected void paintComponent(Graphics g) { 
    g.drawImage(
     isSelected() ? 
      getCheckedImg() : 
      getBasicImg() 
    , 0, 0, this); 
} 

但似乎一旦按鈕被繪製,這是它永遠使用圖像。 isSelected測試似乎沒有任何效果。圖形緩存或Java的東西?我如何爲我的自定義JRadioButton提供選定和未選擇的圖像?我必須編寫自定義用戶界面嗎?

+0

如果每次選擇切換時添加一個偵聽器並在按鈕上調用repaint()會怎麼樣? – I82Much 2010-07-24 02:11:14

回答

4

閱讀API。有如下方法:

setIcon() 
setSelectedIcon() 

其中,您可以使用,而不是自定義繪畫。

+0

這保留了模型的功能,而且更簡單! – trashgod 2010-07-24 03:51:19

+0

我想我不明白你的要求。這兩種方法的要點是用你想要的任何東西替換「單選按鈕圖標」。張貼您的SSCCE(http://sscce.org )顯示問題。 – camickr 2010-07-25 00:41:48

+0

這是我的錯,這被拒絕了。我在事故中點擊了錯誤的按鈕!此解決方案完全可行。這是非常容易實現的,我不必與UI搞砸。謝謝! – 2010-07-25 02:53:19

-3

即使在Java swing中,爲了自定義外觀,我通常會覆蓋paint而不是paintComponent。我相信默認paint將撥打paintComponent,但只有組件必須被重新粉刷。

+0

-1,自定義繪畫應該在paintComponent()而不是paint()中完成。閱讀自定義繪畫中的Swing教程部分:http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/uiswing/TOC.html – camickr 2010-07-24 03:15:27

+0

謝謝,我已閱讀過,並曾多次閱讀。然而,'paint'的基本版本調用'paintComponent'以及其他動作;當我不需要這些操作時(這很常見),我沒有重寫'paint'的問題。你只是把「RTFM」放在漂亮的裙子裏。我有RTFM,然後是RTFSourceCode,然後我爲自己的項目做出了自己的邏輯決策。 – 2010-07-24 06:22:30

+0

這對你來說可能很好,但是這個建議與Swing設計使用的方式背道而馳,因此你需要解釋使用這種方法的後果/好處。 – camickr 2010-07-24 15:56:25