Vaadin - 中心自定义组件
Vaadin - center custom component
使用 Grails 2.3.9 和 Vaadin 插件 7.3.9
class MyUI extends UI {
@Override
protected void init(VaadinRequest vaadinRequest) {
VerticalLayout layout = new VerticalLayout()
layout.setMargin(true)
SignInForm signInForm = new SignInForm()
layout.addComponent(signInForm)
layout.setComponentAlignment(signInForm, Alignment.MIDDLE_CENTER)
layout.setSizeFull()
setContent(layout)
}
}
自定义组件
class SignInForm extends CustomComponent {
Panel p = new Panel()
public SignInForm() {
p.setSizeUndefined()
Label label = new Label("test");
p.setContent(label);
setCompositionRoot(p);
}
}
这是它的样子:
如何使自定义组件水平居中?
将自定义组件放置在垂直布局中。将自定义组件的大小设置为未定义。将垂直布局的大小设置为完整并居中对齐。
public void init(VaadinRequest request) {
VerticalLayout vLayout = new VerticalLayout();
SignInComponent signInComponent = new SignInComponent();
vLayout.addComponent(signInComponent);
vLayout.setSizeFull();
vLayout.setComponentAlignment(signInComponent, Alignment.MIDDLE_CENTER);
this.setContent(vLayout);
class SignInComponent extends CustomComponent {
public SignInComponent() {
Panel p = new Panel();
p.setSizeUndefined();
Label label = new Label("test");
p.setContent(label);
this.setSizeUndefined();
this.setCompositionRoot(p);
}
}
或
使用面板而不是自定义布局:
public void init(VaadinRequest request) {
VerticalLayout vLayout = new VerticalLayout();
SignInPanel signInPanel = new SignInPanel();
vLayout.addComponent(signInPanel);
vLayout.setSizeFull();
vLayout.setComponentAlignment(signInPanel, Alignment.MIDDLE_CENTER);
this.setContent(vLayout);
}
class SignInPanel extends Panel {
public SignInPanel() {
this.setSizeUndefined();
Label label = new Label("test");
this.setContent(label);
}
}
两者的代码输出:
如果有人需要 - 如何以最少的 UI class 使用率居中自定义组件(需要导航器组件):
组件:
public class LoginPanel extends Panel {
private TextField loginField;
private PasswordField passField;
private Button signInBtn;
public LoginPanel(){
initComponents();
buildLoginPanel();
}
private void initComponents(){
<omitted>
}
public void buildLoginPanel(){
<omitted>
}
使用组件的视图:
public class LoginView extends VerticalLayout implements View {
private LoginPanel loginPanel;
@Override
public void enter(ViewChangeListener.ViewChangeEvent event) {
}
public LoginView(LoginPanel loginPanel){
setSizeFull();
addComponent(loginPanel);
setComponentAlignment(loginPanel,Alignment.MIDDLE_CENTER);
}
}
UI 入口点:
@Override
protected void init(VaadinRequest request) {
Navigator navi = new Navigator(UI.getCurrent(),this);
navi.addProvider(viewProvider);
navi.navigateTo("login");
}
P.S 执行此操作后 - 您的组件将被集中化
P.S.S 如果有人确实喜欢在某些方面使用 Navigator,只需删除所有地方的 View 而不是 navigator.navaigateTo(...)
使用 setContent(new LoginView())
或类似的东西
希望这会有所帮助
使用 Grails 2.3.9 和 Vaadin 插件 7.3.9
class MyUI extends UI {
@Override
protected void init(VaadinRequest vaadinRequest) {
VerticalLayout layout = new VerticalLayout()
layout.setMargin(true)
SignInForm signInForm = new SignInForm()
layout.addComponent(signInForm)
layout.setComponentAlignment(signInForm, Alignment.MIDDLE_CENTER)
layout.setSizeFull()
setContent(layout)
}
}
自定义组件
class SignInForm extends CustomComponent {
Panel p = new Panel()
public SignInForm() {
p.setSizeUndefined()
Label label = new Label("test");
p.setContent(label);
setCompositionRoot(p);
}
}
这是它的样子:
如何使自定义组件水平居中?
将自定义组件放置在垂直布局中。将自定义组件的大小设置为未定义。将垂直布局的大小设置为完整并居中对齐。
public void init(VaadinRequest request) {
VerticalLayout vLayout = new VerticalLayout();
SignInComponent signInComponent = new SignInComponent();
vLayout.addComponent(signInComponent);
vLayout.setSizeFull();
vLayout.setComponentAlignment(signInComponent, Alignment.MIDDLE_CENTER);
this.setContent(vLayout);
class SignInComponent extends CustomComponent {
public SignInComponent() {
Panel p = new Panel();
p.setSizeUndefined();
Label label = new Label("test");
p.setContent(label);
this.setSizeUndefined();
this.setCompositionRoot(p);
}
}
或
使用面板而不是自定义布局:
public void init(VaadinRequest request) {
VerticalLayout vLayout = new VerticalLayout();
SignInPanel signInPanel = new SignInPanel();
vLayout.addComponent(signInPanel);
vLayout.setSizeFull();
vLayout.setComponentAlignment(signInPanel, Alignment.MIDDLE_CENTER);
this.setContent(vLayout);
}
class SignInPanel extends Panel {
public SignInPanel() {
this.setSizeUndefined();
Label label = new Label("test");
this.setContent(label);
}
}
两者的代码输出:
如果有人需要 - 如何以最少的 UI class 使用率居中自定义组件(需要导航器组件):
组件:
public class LoginPanel extends Panel {
private TextField loginField;
private PasswordField passField;
private Button signInBtn;
public LoginPanel(){
initComponents();
buildLoginPanel();
}
private void initComponents(){
<omitted>
}
public void buildLoginPanel(){
<omitted>
}
使用组件的视图:
public class LoginView extends VerticalLayout implements View {
private LoginPanel loginPanel;
@Override
public void enter(ViewChangeListener.ViewChangeEvent event) {
}
public LoginView(LoginPanel loginPanel){
setSizeFull();
addComponent(loginPanel);
setComponentAlignment(loginPanel,Alignment.MIDDLE_CENTER);
}
}
UI 入口点:
@Override
protected void init(VaadinRequest request) {
Navigator navi = new Navigator(UI.getCurrent(),this);
navi.addProvider(viewProvider);
navi.navigateTo("login");
}
P.S 执行此操作后 - 您的组件将被集中化
P.S.S 如果有人确实喜欢在某些方面使用 Navigator,只需删除所有地方的 View 而不是 navigator.navaigateTo(...)
使用 setContent(new LoginView())
或类似的东西
希望这会有所帮助