2011-09-11 93 views
2

我正在編寫我的第一個LWUIT和Java ME應用程序,並試圖讓按鈕狀態工作。我知道我可以在資源編輯器中做到這一點,但我真的很想知道爲什麼我的代碼無法正常工作。我在下面的代碼看起來行爲不規律。如果我選擇第一個按鈕,它工作正常。當我選擇第二個按鈕時,該按鈕具有所選的前景,但是未選擇狀態的背景。第三個按鈕也是一樣。但是,當我回到第一個按鈕時,第一個按鈕和第三個按鈕都具有選定狀態的背景,第一個按鈕的前景爲選定狀態,第三個按鈕的前景爲未選定狀態。 我試過閱讀教程和在線論壇,但似乎大部分都是可怕的過時。即使是官方LWUIT頁面上的教程,其中的命令也是如此,因此Netbeans將它們顯示爲未解決,而不是棄用。我確定這是一個簡單的錯誤,但我從這段代碼看不到其他按鈕是如何受到選擇或取消選擇影響的,或者爲什麼每次按鈕狀態改變時選擇和取消選擇的樣式都會改變。在LWUIT中設置按鈕狀態

Style buttonUp = new Style(); 
    buttonUp.setAlignment(Component.CENTER); 
    buttonUp.setBgColor(0x0082ff); 
    buttonUp.setFgColor(0xffffff); 
    buttonUp.setMargin(5,5,0,0); 

    Style buttonDown = new Style(); 
    buttonDown.setAlignment(Component.CENTER); 
    buttonDown.setBgColor(0xd7d7ee); 
    buttonDown.setFgColor(0x000000); 
    buttonDown.setMargin(5,5,0,0);   

    Container buttons = new Container(new BoxLayout(BoxLayout.Y_AXIS)); 
    Button firstButton = new Button("first"); 
    firstButton.setUnselectedStyle(buttonUp); 
    firstButton.setSelectedStyle(buttonDown); 
    firstButton.setPressedStyle(buttonDown); 

    Button secondButton = new Button("second"); 
    secondButton.setUnselectedStyle(buttonUp); 
    secondButton.setSelectedStyle(buttonDown); 
    secondButton.setPressedStyle(buttonDown); 

    Button thirdButton = new Button("third"); 
    thirdButton.setUnselectedStyle(buttonUp); 
    thirdButton.setSelectedStyle(buttonDown); 
    thirdButton.setPressedStyle(buttonDown); 

這應該是所有相關的代碼,因爲它是與按鈕,比addComponent調用,添加按鈕的容器和容器的形式,其他交易的唯一部分。

回答

3

您正在重複使用不合法的樣式對象實例,每個組件狀態都必須包含單個實例。這是LWUIT更常見的是這樣做的:

button.getUnselectedStyle().setFgColor(...); 

或者,你可以實現一個方法的邏輯:

updateButtonTheme(Style); 

並調用它爲:

updateButtonTheme(button.getUnselectedStyle()); 
+0

感謝。出於某種奇怪的原因,當我在上面的代碼中向按鈕添加邊框時,情況自行解決。我確信「修復」實際上是一個小故障,因爲添加邊界應該沒有什麼區別。我按照你的建議調整了代碼,現在它工作正常。 – John