2016-07-12 10 views
3

Mein Problem ist eine Node zu deaktivieren, so dass ein Benutzer nicht interagieren kann, während ich es drucke. Aus dem gleichen Grund muss ich aber für den gesamten Node (in diesem Fall ein GridPane) und alle seine Kinder (Buttons und Labels in erster Linie) nicht vom Benutzer interagierbar sein, während der Druck läuft.Wie kann man einen Knoten deaktivieren, ohne ihn in JavaFX auszugrauen?

Wenn ich schreibe setDisable, Graustufen das ganze Node heraus, aber ich möchte die ursprüngliche Farbe und den Zustand der Node behalten, während es deaktiviert ist.

Gibt es eine Möglichkeit, dies zu tun? Entweder durch die oder andere Mittel, spielt für mich keine Rolle. Der Schlüssel hier ist, dass Sie nicht mit der Node interagieren können.

Vielen Dank im Voraus

+0

Erwähnen möchte ich auch hinzufügen ProgressIndicator oder eine Animation, damit der Benutzer sehen kann, dass etwas vor sich geht. – GOXR3PLUS

Antwort

4

Ich habe eine Antwort gefunden:

Von @awksp „alle Knoten in JavaFX haben eine setMouseTransparent() Methode, wie hier detailliert, wo die MouseTransparent Eigenschaft ist:

If true, this node (together with all its children) is completely transparent to mouse events. When choosing target for mouse event, nodes with mouseTransparent set to true and their subtrees won't be taken into account.... "

habe ich dann weiter setFocusTraversable(false), so dass Sie mit dem Knoten interagieren could't, indem es durch andere Mittel

Dank Fokussierung für die Hilfe @awksp: https://stackoverflow.com/a/24164911/6197978

+0

Immer noch nicht auf Touch-und Gestenereignissen helfen. – Mordechai

+0

Habe das nicht speziell getestet, aber ich versuche mich an einen ähnlichen Fall zu erinnern, den ich einmal hatte. Vielleicht liege ich aber falsch. – Mordechai

4

css Ihr Problem verwenden deaktiviert Eigenschaft lösen können. und Hintergrund und Textfarbe ändern. Folgendes ist die Css von Combobox, aber Sie können einen Teil davon nehmen.

.transparent:disabled, .transparent:disabled .arrow-button .arrow, .transparent:disabled .combo-box-base { 
    -fx-background-color: #ffffff; 
    -fx-opacity: 1; 
    -fx-text-fill:#000000; 
} 

für weitere Informationen bitte folgenden Link von CSS Nachschlagewerk in javafx siehe

https://docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html

+0

Danke für die Hilfe.Vorläufig werde ich eine andere Lösung verwenden, da es für mich am einfachsten ist und ohne Probleme funktioniert. Wenn es später herauskommt, werde ich sicher sein, den Code mit Hilfe der Lösung von dir und @DVarga wiederherzustellen. – Yous0147

4

Sie können einen Blick auf modena.css nehmen:

/* ==== DISABLED THINGS ================================================= */ 
.label:disabled, 
.button:disabled, 

... a lot more control here ... 

.table-cell:selected:disabled, 
.tree-table-cell:selected:disabled { 
    -fx-opacity: 0.4; 
} 

Das bedeutet, wenn der disabled Selektor vorhanden ist, setzt es das -fx-opacity Attribut auf 0.4 von der Standard 1.0.

Opazität kann konzeptionell als Nachbearbeitung angesehen werden. Nachdem der Knoten (einschließlich seiner Nachkommen) in ein RGBA-Offscreen-Bild gerendert wurde, legt die Opazitätseinstellung konzeptionell fest, wie das Offscreen-Rendering in das aktuelle Composite-Rendering gemischt wird.

Sie können in Ihrem CSS inculude dies, um die Opazität Änderung auf jede Steuerung zu entfernen:

* :disabled { 
    -fx-opacity: 1; 
} 
+0

Danke für die Antwort. Ich habe tatsächlich versucht, ein neues Stylesheet nach dem Setzen von disable auf true mit 'setStyle (" - fx-opacity: 1; ")' zu laden und die Deckkraft zu ändern, aber aus irgendeinem Grund hat es sich nicht geändert. Ich habe eine andere Lösung gefunden, aber danke für die Hilfe. – Yous0147

Verwandte Themen