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.
Obrigado.
Classe Principal
[code]public class Principal extends Application {
public static Stage myStage;
@Override
public void start(Stage estagio) throws IOException {
Principal.myStage = estagio;
Parent root;
root = FXMLLoader.load(getClass().getResource("Ui.fxml"));
Scene cena = new Scene(root);
estagio.setScene(cena);
estagio.sizeToScene();
estagio.show();
}
public static void main(String[] args) {
launch(args);
}
}[/code]
Classe Ui
[code]public class Ui implements javafx.fxml.Initializable{
@FXML
private Button plus;
@Override
public void initialize(URL URL, ResourceBundle resources) {
plus.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
//não sei o que colocar aqui
}
});
}
}
[/code]
Obrigado!
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:
[code]public class Ui implements javafx.fxml.Initializable{
@FXML
private Button plus;
@FXML
private AnchorPane mainPane;
@Override
public void initialize(URL URL, ResourceBundle resources) {
plus.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
// Cria novo Label
Label lb = new Label("Telefone:");
lb.setLayoutX(/* coordenada X */);
lb.setLayoutY(/* coordenada Y */);
// Cria novo TextField
TextField tx = new TextField();
tx.setLayoutX(/* coordenada X */);
tx.setLayoutY(/* coordenada Y */);
// Adiciona os dois componentes no painel principal (mainPane)
mainPane.getChildren().addAll(lb, tx);
}
});
}
}[/code]
Espero que ajude!
Té mais!
[quote=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:
[code]public class Ui implements javafx.fxml.Initializable{
@FXML
private Button plus;
@FXML
private AnchorPane mainPane;
@Override
public void initialize(URL URL, ResourceBundle resources) {
plus.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
// Cria novo Label
Label lb = new Label("Telefone:");
lb.setLayoutX(/* coordenada X */);
lb.setLayoutY(/* coordenada Y */);
// Cria novo TextField
TextField tx = new TextField();
tx.setLayoutX(/* coordenada X */);
tx.setLayoutY(/* coordenada Y */);
// Adiciona os dois componentes no painel principal (mainPane)
mainPane.getChildren().addAll(lb, tx);
}
});
}
}[/code]
Espero que ajude!
Té mais![/quote]
Oi Valkyrium! Muito obrigado! Mas o que seria o MainPane? Pode ser simplesmente o Group da minha Scene?
[quote=tiagomourabrandao][quote=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:
[code]public class Ui implements javafx.fxml.Initializable{
@FXML
private Button plus;
@FXML
private AnchorPane mainPane;
@Override
public void initialize(URL URL, ResourceBundle resources) {
plus.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
// Cria novo Label
Label lb = new Label("Telefone:");
lb.setLayoutX(/* coordenada X */);
lb.setLayoutY(/* coordenada Y */);
// Cria novo TextField
TextField tx = new TextField();
tx.setLayoutX(/* coordenada X */);
tx.setLayoutY(/* coordenada Y */);
// Adiciona os dois componentes no painel principal (mainPane)
mainPane.getChildren().addAll(lb, tx);
}
});
}
}[/code]
Espero que ajude!
Té mais![/quote]
Oi Valkyrium! Muito obrigado! Mas o que seria o MainPane? Pode ser simplesmente o Group da minha Scene?[/quote]
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:
[code]@FXML
private Group group;
@Override
public void initialize(URL URL, ResourceBundle resources) {
// Demais códigos…
group.getChildren().addAll(lb, tx);
}[/code]
Qualquer dúvida, tou aqui!