hans-georg1
(hans-georg gloeckler)
1
I have a HorizotnalLayout
HorizontalLayout navBar = new HorizontalLayout();
Button button1 = new Button("button1");
button1.setId("b1");
navBar.ad(button1);
....
navBar.ad(button2);
navBar.ad(button3);
How can i iterate over navBar to change text of button1?
Jakob18
(Jakob Handrick)
2
Keep the reference to button1.
public class MyView extends VerticalLayout {
private Button button1;
public MyView {
HorizontalLayout navBar = new HorizontalLayout();
button1 = new Button("button1");
navBar.add(button1);
addComponent(navBar);
}
private void doSomething() {
button1.setCaption("I've done it!");
}
}
hans-georg1
(hans-georg gloeckler)
3
Thanks for your answer. But my problem is a little bit different.
I hava a MainView where i add the navBar
@Component
@Scope(value="session")
public class TopNav extends Div {
public final String ID_USER_BUTTON = "IdUserButton";
private HorizontalLayout topNavigation;
private Button homeButton;
private Button mailButton;
private Button userButton;
public TopNav() {
topNavigation = new HorizontalLayout();
Icon iconHome = new Icon(VaadinIcon.HOME);
homeButton = new Button();
homeButton.setIcon(iconHome);
homeButton.addClickListener(e -> {
homeButton.getUI().ifPresent(view -> view.navigate("HomeView"));
});
mailButton = new Button("Email");
mailButton.addClickListener(e -> {
mailButton.getUI().ifPresent(view -> view.navigate("MailView"));
});
String userName = "abc";
userButton = new Button(userName);
userButton.addClickListener(e -> {
userButton.getUI().ifPresent(view -> view.navigate("UserView"));
});
userButton.setId(ID_USER_BUTTON);
topNavigation.add(homeButton, mailButton, userButton);
add(topNavigation);
}
public void setUserButtonCaption(String caption) {
userButton.setText(caption);
}
@HtmlImport("frontend://styles/shared-styles.html")
@Viewport("width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes")
@Theme(value = Lumo.class)
@Route("")
public class MainView extends HorizontalLayout implements RouterLayout {
private static final long serialVersionUID = 1L;
private TopNav topNav;
public MainView() {
topNav = new TopNav();
add(topNav);
}
}
I want now to set in the HomeView the Text of my userButton with an Value i have set in the Session.
Something like
@Route(value = "HomeView", layout = MainView.class)
@PageTitle("Home")
public class HomeView extends VerticalLayout {
@Autowired
TopNav topNav;
private static final long serialVersionUID = 1L;
public static final String VIEW_NAME = "HomeView";
@PostConstruct
void init() {
topNav.setUserButtonCaption("Hallo Welt");
}
When i make it so in class HomeView, the Text of userButton doesn’t change?
ollit.1
(Olli Tietäväinen)
4
layout.getChildren().forEach( child -> { /* do something with child */ } );