Panel 为带有边框和标题的简单容器类,它的客户区为一布局对象,其缺省布局方式为VerticalLayout,可以通过setContent来修改缺省布局。
Panel的标题可以由图标和文字构成。
// Create a panel with a caption. final Panel panel = new Panel("Contact Information"); panel.addStyleName("panelexample"); // The width of a Panel is 100% by default, make it // shrink to fit the contents. panel.setWidth(Sizeable.SIZE_UNDEFINED, 0); // Create a layout inside the panel final FormLayout form = new FormLayout(); // Have some margin around it. form.setMargin(true); // Add some components form.addComponent(new TextField("Name")); form.addComponent(new TextField("Email")); // Set the layout as the root layout of the panel panel.setContent(form);
对于Panel来说,如果其大小为“未定义”,那么它会自动适应其所包含的UI组件的大小。但如果它有固定大小而其中所需显示内容过大,则会自动显示滚动条。
如下例在Panel中显示一幅图像:
// Serve the image from the theme Resource rsrc = new ThemeResource("img/embedded-journalist.jpg"); // Display the image without caption Embedded image = new Embedded(null, rsrc); image.setSizeUndefined(); // Actually the default // The panel will give it scrollbars. The root layout // (VerticalLayout) must have undefined width to make the // horizontal scroll bar appear. Panel panel = new Panel("Embedding"); panel.setWidth("400px"); panel.setHeight("300px"); panel.getContent().setSizeUndefined(); panel.addComponent(image); layout.addComponent(panel);
Panel的滚动条也可以使用程序来控制,首先通过 setScrollable(true) 打开滚动条控制,然后使用 setScrollTop()和setScrollLeft()来控制滚动条的位置。
final Panel panel = new Panel("Scrolling Panel"); panel.setHeight("300px"); panel.setWidth("400px"); panel.getContent().setHeight("1000px"); panel.setScrollable(true); layout.addComponent(panel); HorizontalLayout scrollButtons = new HorizontalLayout(); layout.addComponent(scrollButtons); Button scrollUp = new Button("Scroll Up"); scrollUp.addListener(new Button.ClickListener() { public void buttonClick(ClickEvent event) { int scrollPos = panel.getScrollTop() - 250; if (scrollPos < 0) scrollPos = 0; panel.setScrollTop(scrollPos); } }); scrollButtons.addComponent(scrollUp); Button scrollDown = new Button("Scroll Down"); scrollDown.addListener(new Button.ClickListener() { public void buttonClick(ClickEvent event) { int scrollPos = panel.getScrollTop(); if (scrollPos > 1000) scrollPos = 1000; panel.setScrollTop(scrollPos + 250); } }); scrollButtons.addComponent(scrollDown);