2011-10-14 31 views
1

在我的應用程序中,我有一些自定義按鈕,它們具有自定義文本/圖標佈局和一些通常不與按鈕關聯的額外元素。例如有些有兩個文本標籤而不是一個。合成器的JPanel狀態

我實現了我的自定義按鈕,如下所示:

class CustomButton extends JPanel implements MouseListener { 
    CustomButton() { 
     setName("CustomButton"); 
    } 
} 

我使用合成器用於L &樓,我想有儘可能多的樣式信息儘可能(主要是顏色設置)在XML文件中定義)。

在XML文件中我有這樣的:

<style id="customButtonStyle"> 
    <state> 
     <color idref="A" type="BACKGROUND" /> 
    </state> 
    <state value="MOUSE_OVER"> 
     <color idref="B" type="BACKGROUND" /> 
    </state> 
    <state value="PRESSED"> 
     <color idref="C" type="BACKGROUND" /> 
    </state> 
</style> 
<bind sytle="customButtonStyle" type="name" key="CustomButton" /> 

當我運行應用程序,顏色「A」被正確使用,但顏色「B」和「C」永遠不會置。

我的問題是,如何通知Synth有關我的自定義按鈕的狀態?

另一方面:我確實考慮過CustomButton擴展JButton,但我無法找到一個製作具有自定義子組件的按鈕的好方法。如果這種方法無法解決,我可能會將其作爲單獨的問題發佈。

回答

2

也許不是回答你的問題,我認爲,更舒適是ButtonModel使用情況,MouseListenerMouseMotionListener,例如對於我的想法是here

+0

是啊,其實我有一個'DefaultButtonModel'實例我m在內部使用來設置'MouseListener'方法的狀態。我希望我可以將其綁定到Swing UI類中的一個偵聽器。 – vaughandroid

+0

ButtonModel從Mouse和KeyBoards實現了內部需要的事件,然後沒有必要實現MouseListener兩次, – mKorbel

+0

從我所知道的,ButtonModel只處理鼠標和鍵盤事件,一旦它被添加到使用AbstractButton.setModel( )'''DefaultButtonModel'不實現'MouseListener'。由於我擴展了'JPanel',我不得不啓動通常由'AbstractButton'觸發的狀態更改。 – vaughandroid