Vaadin中创建的主题必须放置在VAADIN/themes 目录下。目录名称即为新的主题名称,新主题中必须包含一个styles.css 文件。新主题也必须继承某个Vaadin内置主题,如:
@import "../reindeer/styles.css"; .v-app { background: yellow; }
前面介绍的Vaadin个UI组件和布局都可以通过CSS 修改它们的显示外观。它们都定义了对应的Vaadin 的CSS类名,下表给出了Vaadin中标准UI组件的CSS类名:
Server-Side Component | Client-Side Widget | CSS Class Name |
---|---|---|
AbsoluteLayout | VAbsoluteLayout | v-absolutelayout |
Accordion | VAccordion | v-accordion |
Button | VButton | v-button |
CheckBox | VCheckBox | v-checkbox |
CssLayout | VCssLayout | v-csslayout |
CustomComponent | VCustomComponent | v-customcomponent |
CustomLayout | VCustomLayout | v-customlayout |
DateField | VDateField | v-datefield |
VCalendar | v-datefield-entrycalendar | |
VDateFieldCalendar | v-datefield-calendar | |
VPopupCalendar | v-datefield-calendar | |
VTextualDate | ||
Embedded | VEmbedded | ? |
Form | VForm | v-form |
FormLayout | VFormLayout | ? |
GridLayout | VGridLayout | ? |
Label | VLabel | v-label |
Link | VLink | v-link |
OptionGroup | VOptionGroup | v-select-optiongroup |
HorizontalLayout | VHorizontalLayout | v-horizontallayout |
VerticalLayout | VVerticalLayout | v-verticallayout |
Panel | VPanel | v-panel |
Select | ||
VListSelect | v-listselect | |
VFilterSelect | v-filterselect | |
Slider | VSlider | v-slider |
SplitPanel | VSplitPanel | ? |
VSplitPanelHorizontal | ? | |
VSplitPanelVertical | ? | |
Table | VScrollTable | v-table |
VTablePaging | v-table | |
TabSheet | VTabSheet | v-tabsheet |
TextField | VTextField | v-textfield |
VTextArea | ||
VPasswordField | ||
Tree | VTree | v-tree |
TwinColSelect | VTwinColSelect | v-select-twincol |
Upload | VUpload | ? |
Window | VWindow | v-window |
? | CalendarEntry | ? |
? | CalendarPanel | v-datefield-calendarpanel |
? | ContextMenu | v-contextmenu |
? | VUnknownComponent | vaadin-unknown |
? | VView | ? |
? | Menubar | gwt-MenuBar |
? | MenuItem | gwt-MenuItem |
? | Time | v-datefield-time |
Vaadin 内置了两种主题,reindeer 和 runo, Vaadin 6.0 缺省使用reindeer 主题。 有关主题定义的常数定义在包com.vaadin.ui.themes 中。
setTheme("runo"); Panel panel = new Panel("Regular Panel in the Runo Theme"); panel.addComponent(new Button("Regular Runo Button")); // A button with the "small" style Button smallButton = new Button("Small Runo Button"); smallButton.addStyleName(Runo.BUTTON_SMALL); Panel lightPanel = new Panel("Light Panel"); lightPanel.addStyleName(Runo.PANEL_LIGHT); lightPanel.addComponent(new Label("With addStyleName(\"light\")"));
Vaadin 的Eclipse插件可以帮助创建新主题,为项目添加一个新主题. New -> Other -> Vaadin -> Vaadin theme
按照向导一步一步,就可以创建一个新的主题,然后修改新主题下的styles.css ,就可以达到自己预期的显示效果。