2012-12-29 34 views
1

我有問題顯示包含例如標籤和按鈕的多個面板。我想聽按鈕點擊並顯示面板上的標籤值。 代碼看起來是這樣的:Vaadin - 多個按鈕實例 - 不同的點擊監聽器動作

for(int i=0; i < 5;i++){ 
Panel p = new Panel("panel "+i); 
Label l = new Label("label "+ i); 
p.addComponent(l); 
Button show = new Button("Show Label in subWindow", new Button.ClickListener() { 
       public void buttonClick(ClickEvent event) { 
        Window sub = new Window("testing "+label); 
        getMainWindow().addWindow(sub); 
       } 
    }); 
} 

我知道,在每一個按鈕的代碼記住標籤的最後一個值。 我如何在循環中爲每個傳遞綁定特定的按鈕來顯示特定標籤的值? 我正在試圖在wicket中實現像PageableListView控件。

我希望你能理解我的問題! 謝謝!

回答

1

爲什麼你不能繼承Button並使Label實例(Panel實例或任何其他實例)成爲其狀態的一部分?

public class MyButton extends Button { 

    private Label label; 

    public MyButton (String title, Label l) { 
     super(...); 
     this.label = l; 
     addListener(...); 
    } 
} 

換句話說,如果你需要一個按鈕來鏈接某個對象 - 明確地創建它。

+1

感謝您的回答。我發現Vaadin的class Button有setData和getData方法。所以,它有可能做到button.setData(product),再次在listener中做event.getButton()。getData() – Radvd

+0

不客氣。 AbstractComponent.setData(Object data)的解決方案不太明確,它也違反了OOP方法。調用標籤數據並將它作爲Object來按鈕是否很直接? –