2016-11-05 1 views
0

Ich mache ein JavaFX-Formular-Programm. Die Formulardaten werden mit einer ArrayList von Pages behandelt, bei denen es sich um ArrayLists von Knoten handelt, bei denen es sich um Objekte handelt, die das GUI-Element (Label) und seine Datenelemente enthalten. so
wie:Wie kann ich kommunizieren, welches Objekt (innerhalb einer ArrayList) einem angeklickten Knoten zugeordnet wird?

Haupt Erklärung

private final ArrayList<ArrayList<FormNode>> form = new ArrayList<>(); 
private final ArrayList<FormNode> page = new ArrayList<>(); 
int currentNode = 0; //index of currently active node 

Objektklasse

public class FormNode { 

    private String nodeName; 
    private boolean visible; 
    private boolean editable; 
    private Label nodeGUI; 

    //Constructor...Sets...Gets...Methods 

} 

Wenn der Knoten initialisiert wird, wird sie in einem Bereich hinzugefügt und zugewiesen Ereignis Handler über eine separate Klasse. Was ich versuche, ist, dass das Programm kommuniziert, welches Objekt aktiv ist, indem ich auf den Knoten klicke, der ihm zugeordnet ist, so dass es als der aktive Knoten markiert werden kann.

Etwas Ähnliches (nicht wirklich meine eigentliche Code, nur Pseudo von dem, was ich brauche):

Der Benutzer klickt auf die gewünschte Etikett (Knoten) in der GUI, die ruft ...

nodeGUI.setOnMousePressed(new EventHandler<MouseEvent>() { 
    @Override public int handle(MouseEvent mouseEvent) { 

     --- call a method to assign the value --- 
     currentNode = thisNodesIndex; 


    } 
    }); 

Die Idee besteht darin, den Index des FormNode-Objekts in der verschachtelten Seite ArrayList zurückzugeben, um currentNode diesen Wert zuzuweisen.

Im Moment funktioniert alles gut, aber Zugriff auf den Index ist das Problem. Auf die Daten wird vom Label selbst zugegriffen (x, y, height, width usw.), aber ich muss es als Mitglied des Objekts erkennen, damit ich die anderen Attribute manipulieren kann. (d. h. nodeName, visible usw.).

Irgendwelche Ideen?

Antwort

0

Ich weiß es nicht Wenn ich wirklich verstehe, was Sie fragen, aber versuchen Sie es.

@Override 
public void handle(Event evt) { 
    System.out.println(((Control)evt.getSource()).getId()); 
} 

In Ihrem Fall:

nodeGUI.setOnMousePressed(new EventHandler<MouseEvent>() { 
    @Override 
    public int handle(MouseEvent mouseEvent) { 
     //--- call a method to assign the value --- 
     currentNode = thisNodesIndex; 
     System.out.println(((Control)mouseEvent.getSource()).getId()); 
    } 
}); 
+0

Sorry, wenn ich nicht klar bin. Ich frage im Grunde, wie ich die Dinge ein wenig rückwärts laufen soll. Wenn jemand auf eine Variable oder ein Attribut eines Objekts in einer Arraylist zugreift, indem er auf die Arraylist in einem bestimmten Index zugreift, möchte ich wissen, aus welchem ​​Objekt (in welchem ​​Index) ein bestimmtes Attribut stammt. In diesem Fall ein Knoten in einer GUI (Schaltfläche, Label, etc). Wenn ich darauf klicke, möchte ich das Objekt erhalten, in dem es sich befindet. Wenn ich also auf das dritte Etikett klicke, kann ich sagen, dass es das Etikett ist, das im Objekt von 'form.get (3)' enthalten ist. Ich suche nach einer 3 zurück. – LazyBear

+0

Ich werde Ihren Vorschlag versuchen und sehen, ob es das ist, wonach ich suche. Vielen Dank – LazyBear

Verwandte Themen