Evento para adicionar elementos no layout JavaFX e FXML
3 respostas
tiagomourabrandao
Olá pessoal! Ainda estou aprendendo as coisas aqui no GUJ e estou gostando muito!
Mas, estou com um problema que não sei como resolver. Estou desenvolvendo uma aplicação desktop para cadastro de contatos e gostaria que o usuário tivesse a liberdade de adicionar quantos telefones e email quisesse para cada contato. Para isso, criei um botão de "+" e, ao clicar neste botão, gostaria que fossem criadas nos Label's e TextField's à minha User Interface. Eu sei fazer isso criando todo layout na mão, porém os FXML's facilitaram, por um lado, muito a criação de interfaces. Gostaria de saber se alguém pode me ajudar.
publicclassUiimplementsjavafx.fxml.Initializable{@FXMLprivateButtonplus;@Overridepublicvoidinitialize(URLURL,ResourceBundleresources){plus.setOnAction(newEventHandler<ActionEvent>(){@Overridepublicvoidhandle(ActionEvente){//não sei o que colocar aqui}});}}
É o seguinte, basta você dar um ID para o AnchorPane principal da sua tela, aí você inicializa ele na classe Initializable, e então você pode criar e/ou alterar componentes dele.
Exemplo:
publicclassUiimplementsjavafx.fxml.Initializable{@FXMLprivateButtonplus;@FXMLprivateAnchorPanemainPane;@Overridepublicvoidinitialize(URLURL,ResourceBundleresources){plus.setOnAction(newEventHandler<ActionEvent>(){@Overridepublicvoidhandle(ActionEvente){// Cria novo Label Labellb=newLabel("Telefone:");lb.setLayoutX(/* coordenada X */);lb.setLayoutY(/* coordenada Y */);// Cria novo TextFieldTextFieldtx=newTextField();tx.setLayoutX(/* coordenada X */);tx.setLayoutY(/* coordenada Y */);// Adiciona os dois componentes no painel principal (mainPane)mainPane.getChildren().addAll(lb,tx);}});}}
Espero que ajude! :D
Té mais!
tiagomourabrandao
Valkyrium:
Boa tarde Tiago!
É o seguinte, basta você dar um ID para o AnchorPane principal da sua tela, aí você inicializa ele na classe Initializable, e então você pode criar e/ou alterar componentes dele.
Exemplo:
publicclassUiimplementsjavafx.fxml.Initializable{@FXMLprivateButtonplus;@FXMLprivateAnchorPanemainPane;@Overridepublicvoidinitialize(URLURL,ResourceBundleresources){plus.setOnAction(newEventHandler<ActionEvent>(){@Overridepublicvoidhandle(ActionEvente){// Cria novo Label Labellb=newLabel("Telefone:");lb.setLayoutX(/* coordenada X */);lb.setLayoutY(/* coordenada Y */);// Cria novo TextFieldTextFieldtx=newTextField();tx.setLayoutX(/* coordenada X */);tx.setLayoutY(/* coordenada Y */);// Adiciona os dois componentes no painel principal (mainPane)mainPane.getChildren().addAll(lb,tx);}});}}
Espero que ajude! :D
Té mais!
Oi Valkyrium! Muito obrigado! Mas o que seria o MainPane? Pode ser simplesmente o Group da minha Scene?
Valkyrium
tiagomourabrandao:
Valkyrium:
Boa tarde Tiago!
É o seguinte, basta você dar um ID para o AnchorPane principal da sua tela, aí você inicializa ele na classe Initializable, e então você pode criar e/ou alterar componentes dele.
Exemplo:
publicclassUiimplementsjavafx.fxml.Initializable{@FXMLprivateButtonplus;@FXMLprivateAnchorPanemainPane;@Overridepublicvoidinitialize(URLURL,ResourceBundleresources){plus.setOnAction(newEventHandler<ActionEvent>(){@Overridepublicvoidhandle(ActionEvente){// Cria novo Label Labellb=newLabel("Telefone:");lb.setLayoutX(/* coordenada X */);lb.setLayoutY(/* coordenada Y */);// Cria novo TextFieldTextFieldtx=newTextField();tx.setLayoutX(/* coordenada X */);tx.setLayoutY(/* coordenada Y */);// Adiciona os dois componentes no painel principal (mainPane)mainPane.getChildren().addAll(lb,tx);}});}}
Espero que ajude! :D
Té mais!
Oi Valkyrium! Muito obrigado! Mas o que seria o MainPane? Pode ser simplesmente o Group da minha Scene?
Este mainPane é o Parent da sua tela, ou seja, o painel principal... Por exemplo, se você fez o seu layout pelo JavaFX Scene Builder (arquivo FXML), sua tela tem um painel principal, onde contém todos os seus componentes. Porém, se você adiciona o Label e TextField em um Group, pode ser ele também... aí seria: