在该布局上按子按钮更改父布局

时间:2011-04-12 15:55:50

标签: java-ee vaadin

我在位于该面板上的按钮上的点击事件更改了标签面板布局时出现问题。主要思想是在每个选项卡面板上的小面板上都有自定义菜单(new,open,del)。单击按钮时,选项卡面板布局将更改为窗体(例如)。我不想使用模态窗口或新窗口,只需通过按钮单击将选项卡面板布局(内容)更改为其他内容。

1 个答案:

答案 0 :(得分:1)

它是错误的指定问题 - 你应该问如何通知父组件。 贝娄你有两个例子说明如何实现你的目标。第一个实现执行Jens Janssons在vaadin论坛上提出的建议,将ClickListener作为构造函数参数传递给第二个面板。请注意,为了能够从外部面板中移除组件,您需要对外部面板和内部面板的引用。在这个例子中,Kim Lappanen将引用存储在类变量中。请注意,实际上,您可以将Horizo​​ntalLayout用于所谓的“面板”,您可以更改它。

public class TestcaseApplication extends Application implements ClickListener {
    private static final long serialVersionUID = 75232258896642392L;

    private final HorizontalLayout mainLayout = new HorizontalLayout();
    private final YourPanel panel = new YourPanel(this);

    @Override
    public void init() {
        setTheme("example");
        Window mainWindow = new Window("Playground Application");
        setMainWindow(mainWindow);

        mainWindow.setContent(mainLayout);

        mainLayout.addComponent(panel);
    }

    public void buttonClick(ClickEvent event) {
        mainLayout.removeComponent(panel);
    }

    public class YourPanel extends Panel {

        public YourPanel(ClickListener listener) {
            super();
            addComponent(new Button("Remove", listener));
        }
    }
}

Antoher示例是直接在内部面板中实现ClickListener。在buttonClick方法中,我只是调用getParent()(返回out布局),然后从该布局中删除自己。

public class TestcaseApplication extends Application {
    private static final long serialVersionUID = 75232258896642392L;

    @Override
    public void init() {
        setTheme("example");
        Window mainWindow = new Window("Playground Application");
        setMainWindow(mainWindow);

        HorizontalLayout mainLayout = new HorizontalLayout();
        mainWindow.setContent(mainLayout);

        mainLayout.addComponent(new YourPanel());
    }

    public class YourPanel extends Panel implements ClickListener {

        public YourPanel() {
            super();
            addComponent(new Button("Remove", this));

        }

        public void buttonClick(ClickEvent event) {
            ((ComponentContainer) getParent()).removeComponent(this);
        }
    }

}