2015-05-05 13 views
8

Ich benötige einen Auswahllistener und wähle Methode in einem Bereich aus, um eine Hervorhebung zu überwachen und anzuzeigen, wenn auf einen Knoten geklickt wird.Hinzufügen einer benutzerdefinierten Komponente zu SceneBuilder 2.0

tat ich folgendes:

public class PaneWithSelectionListener extends Pane { 

private ObjectProperty<Annotation> selectedAnnotation = new SimpleObjectProperty<>(); 

public PaneWithSelectionListener() { 
    super(); 
    selectedAnnotation.addListener((obs, oldAnno, newAnno) -> { 
     if (oldAnno != null) { 
      oldAnno.setStyle(""); 
     } 
     if (newAnno != null) { 
      newAnno.setStyle("-fx-border-color: blue;-fx-border-insets: 5;-fx-border-width: 1;-fx-border-style: dashed;"); 
     } 
    }); 

    setOnMouseClicked(e->selectAnnotation(null)); 
} 

public void selectAnnotation(Annotation ann){ 
    selectedAnnotation.set(ann); 
} 

}

Und dies funktioniert gut - aber ich bin mit SceneBuilder arbeiten mehr seit meiner FXML Referenzen diese PaneWithSelectionListener anstatt die Scheibe nicht in der Lage. Ich bin mir nicht sicher, wie ich mein benutzerdefiniertes Fenster in SceneBuilder bringen kann. Ich habe mir andere Fragen angeschaut und sie sind alle eine Kombination aus FXML und Controllern - wo dies nur ein Fenster ist.

Kennt jemand eine Möglichkeit, dies zu tun, oder vielleicht die Scheibe für einen PaneWithSelectionListener bei der Initialisierung auszutauschen?

Dank

+0

Brauchen Sie nur eine einzige Auswahl? –

+0

Ja - Einzige Auswahl ist alles was ich brauche. Ich stelle Anmerkungen auf einem Bild dar. Wenn der Benutzer auf einen klickt - sollte er auswählen. Ich glaube nicht, dass sie mehrere Auswahlmöglichkeiten brauchen. Nur ein Indikator, welcher davon betroffen sein wird. Vielen Dank. –

Antwort

11

Wenn das Problem nur in SceneBuilder benutzerdefinierten Klasse zur Verfügung zu stellen ist, können Sie dies mit den folgenden Schritten tun:

  1. Bundle Ihre benutzerdefinierte Klasse (und alle unterstützenden Klassen, wie zum Beispiel Annotation) als JAR-Datei
  2. in SceneBuilder, die Dropdown-Schaltfläche neben "Bibliothek" in der oben im linken Fensterbereich aktivieren: enter image description here
  3. wählen Sie „Import JAR/FXML Fil e ...“
  4. die Datei aus Schritt erstellt Jar Wählen Sie 1
  5. sicher, dass die Klasse Stellen benötigen Sie Zugriff auf in SceneBuilder (PaneWithSelectionListener)
  6. Press geprüft "wird nun Import Component"
  7. PaneWithSelectionListener erscheinen in SceneBuilder unter „Custom“ im linken Fensterbereich: enter image description here

Sie werden auf die Dropdown-in SceneBuilder bemerken hat eine „Custom Library-Ordner“ Option, aus dem Sie den Ordner öffnen können, wo die jAR-Dateien gespeichert sind, . Für eine schnelle Option können Sie einfach JAR-Dateien in diesen Ordner kopieren und (nach einer kurzen Verzögerung) werden die enthaltenen Klassen in der Liste "Benutzerdefiniert" angezeigt.

+1

Ich habe das gestern versucht, aber wenn ich versuche, es zu laden, ist die Auswahl leer. –

+0

Ok das ist seltsam. Ich habe meine Komponente in ein anderes Paket verschoben und das Glas exportiert und es hat funktioniert. –

+0

Wenn Sie es im Standard-Paket hatten, denke ich, dass es scheitert (FXML im Allgemeinen nicht gut mit dem Standard-Paket, obwohl der einzige Verlust gibt es für sehr schnellen Test-Code sowieso). –

Verwandte Themen