2012-12-29 19 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来按钮是否很直接? –