Gibt es in JavaFX eine Möglichkeit, allen Objekten die selbe "setShowDelay"-Zeit zu geben, indem man nur eine Zeile braucht?
Aktuell:
public Tooltp a = new Tooltip(); ...
--> AB HIER
a.setShowDelay(Duration.millis(SHOW_DELAY));
b.setShowDelay(Duration.millis(SHOW_DELAY));
c.setShowDelay(Duration.millis(SHOW_DELAY));
d.setShowDelay(Duration.millis(SHOW_DELAY));
e.setShowDelay(Duration.millis(SHOW_DELAY));
.....
Geht es nicht auch kompakter? (Z. B. in nur einer Zeile bzw. ohne dass man jedes Objekt einzeln ansprechen muss)
Das Gleiche würde natürlich auch für setShowDuration und setHideDelay gelten.
2 Antworten
Du kannst eine Methode machen, wo du die Objekte als Array übergibst und dann mit einer for Schleife darüber läufst. Wäre mehr als eine Zeile, würdest dir aber einige Zeichen sparen
public Tooltip[] tooltips = new Tooltip[5];
// ...
for (int i = 0; i < tooltips.length; ++i) {
tooltips[i] = new Tooltip();
tooltips[i].setShowDelay(Duration.millis(SHOW_DELAY));
}
Mit der for-Schleife komme ich für zwei Objekte auf 21 Zeilen (18 ohne "}"). Wenn ich es standardmäßig mache, sind es nur 6. https://pastebin.com/URPRugYU
Dein Code im Pastebin unterscheidet sich erheblich von dem in deiner Fragestellung. 🤨 Angedacht war, dass du die Komponenten nur in dem Array speicherst und nicht noch einmal einzeln irgendwo anders.
Außerdem sind diese Zeilen:
showDurationTT[0] = c.a;
showDurationTT[1] = c.b;
// ...
hideDelayTT[0] = c.a;
hideDelayTT[1] = c.b;
redundant, da du die Arrayelemente in der Schleife wieder überschreibst.
Die unterschiedlichen Schleifen lassen sich zudem zusammenfassen. Folgend gehe ich davon aus, dass die Felder a und b jeweils schon auf existente Tooltip-Objekte zeigen.
Tooltip[] tooltips = new Tooltip[] { c.a, c.b };
for (Tooltip tooltip : tooltips) {
tooltip.setShowDelay(Duration.millis(TT_SHOW_DELAY));
tooltip.setShowDuration(Duration.millis(TT_SHOW_DURATION));
tooltip.setHideDelay(Duration.millis(TT_HIDE_DELAY));
}
Alternativ zur Schleife (vor allem, wenn es sich nicht um mehr als vier Tooltip-Objekte handelt) könnte man den Schleifenkörper auch in eine extra Funktion verfrachten und das Tooltip-Objekt als Parameter überreichen. Die Funktion ruft man anschließend je Objekt einmal auf.
Okay, ich wusste nicht, dass man hinter (bspw.) Tooltip[] tooltips = new Tooltip[] in "{}" alle Variablen eintragen kann :) Danke!
Entweder man packt alle in ein Array und kann damit dann einfacher arbeiten oder man geht über die Nodes wie z.B. hier:
https://stackoverflow.com/questions/19804751/get-all-text-fields-values-and-id-in-javafx
Wie soll sowas aussehen?
for-Schleife ist klar, aber wie kann ich den Objekten nacheinander etwas hinzufügen? Klar, arrayListXY.add(), aber das sieht nicht nach einer Lösung aus.