2017-10-31 4 views
0

Ich habe ein Problem mit JavaFX.Wie bekomme ich Zugriff auf anonyme/dynamische Labels in einer JavaFX VBox?

Was ich versuche, ist ziemlich einfach: 1. Der Benutzer füllen Sie zwei TextField mit dem angegebenen Namen und surename. 2. Durch Klicken auf einen Button "Person hinzufügen" wird ein Objekt der Klasse "Person" zu einer Arrayliste hinzugefügt, die den Namen der Person enthält. Zur gleichen Zeit wird es ein VBox-Objekt geben, das ein Anonymus-Label-Objekt mit dem Namen der Person hinzufügt.

Das Problem: Jetzt möchte ich auf die anonyme Beschriftung in der VBox klicken und das Person-Objekt zurück erhalten.

Hier ist die Methode, eine Person

 btnAddContact.setOnAction(e -> { 
     if (!"".equals(tfVorname.getText().toString()) 
       && !"".equals(tfNachname.getText().toString())) { 
      contactList.addContact(new Contact(tfVorname, tfNachname)); 
      spContacts.setContent(refreshContactList()); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } 
    }); 

Die refreshContactList-Methode fügt die neue anonymus Etikett in die Kontaktliste (ein Arraylist) und zeigt den Namen auf dem Etikett hinzuzufügen:

private VBox refreshContactList() { 

    if (contactList.getContactList().size()>0) { 
     vbContacts.getChildren().add(new Label(contactList.getContactList().get(contactList.getContactList().size()-1).getVorname() + " " + contactList.getContactList().get(contactList.getContactList().size()-1).getNachname()));    
    } 


    return vbContacts; 
} 

Ich habe versucht, ein vbContacts.setOnMouseClicked ... zu programmieren, aber das einzige Objekt, das ich erhalten konnte, war die VBox.

Irgendwelche Ideen, wie man Zugang zu den Labes erhält?

Dank

Karl

+0

Nur ein Kommentar: Sie könnten etwa [ 'ListView'] (https lernen wollen: //docs.oracle.com/javase/8/javafx/user-interface-tutorial/list-view.htm#CEGGEDBF). –

Antwort

1

einfach den Hörer auf dem Etikett hinzufügen, wenn Sie es schaffen:

private VBox refreshContactList() { 

    if (contactList.getContactList().size()>0) { 
     Contact lastContact = contactList.getContactList().get(contactList.getContactList().size()-1); 
     Label label = new Label(lastContact.getVorname() + " " + lastContact.getNachname()) ; 
     label.setOnMouseClicked(e -> { 
      // do whatever you need with lastContact and/or label... 
     }); 
     vbContacts.getChildren().add(label);    
    } 


    return vbContacts; 
}