JavaFX - comment obtenir la couleur d'arrière-plan de l'Onglet, Bouton, etc
Description du problème: je ne peux pas obtenir le fond de l'objet en JavaFX. Je ne veux pas les Formes, mais c'est normal Nœuds comme les Boutons, les Onglets et les autres. Je ne sais pas comment faire pour accéder à leur couleur d'arrière-plan.
Ce que je veux? Je suis en train d'élaborer IDE et je veux courir animation de Couleur sur l'onglet fichier que l'utilisateur veut ouvert et il est déjà existant dans le fichier de programme de collecte. Avant de faire cette animation je veux lire onglet d'origine couleur d'arrière-plan et que la couleur est retourné à onglet à la fin de l'animation. Je tiens également à revenir hover
et selected
propriétés, qui disparaissent lorsque j'ai mis un peu de couleur dans l'animation et ils n'ont jamais revenir. Toutes les couleurs je suis paramètre dans le fichier CSS, et je ne veux pas le changer.
Ma question: la Façon d'obtenir et de définir par programmation Nœud de couleur? Ou comment faire de l'animation de couleur avec enregistrer les propriétés d'origine et à la fin de l'animation d'obtenir ce retour des biens?
Un court exemple:
de l'échantillon.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<TabPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="480.0" prefWidth="600.0" stylesheets="@style.css" tabClosingPolicy="UNAVAILABLE" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<tabs>
<Tab text="Sample tab 1">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
<Tab text="Sample tab 2">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
<Tab text="Sample tab 3">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
</tabs>
</TabPane>
les styles.css
.tab{
-fx-background-color: pink;}
.tab:hover{
-fx-background-color: red;}
.tab:selected{
-fx-background-color: yellow;}
- Il n'existe aucun moyen (que je connais) pour récupérer par programme des styles définis dans un fichier CSS. Mais il n'est pas clair pourquoi vous avez besoin de. Vous pouvez soit définir un style en ligne alors que vous souhaitez que le style soit différent, et puis l'enlever (pour ne revenir à la feuille de style style), ou d'ajouter un nouveau style classe et de le supprimer, ou de définir un CSS pseudoclass et annuler pour revenir à la précédente style.
- Je suppose qu'il est le moyen pour obtenir la couleur d'arrière-plan (OMI, Il n'est pas question de la couleur est chargé à partir d'un fichier CSS ou en quelque sorte par programmation). Comment Java sait quelle est la couleur de l'affichage? Je ne pense pas que Java est la lecture du fichier CSS, encore et encore. Je pense que, quelque part, en infomarion à propos de cette couleur stockée, mais la question est de savoir si j'ai accès à cette information et comment.
- Si la couleur est défini dans une feuille de style externe (soit de votre propre, ou celui par défaut), il n'existe aucun moyen d'obtenir cette information par programme à partir de l'API publique. Bien sûr, le contrôle de lui-même (ou, plus précisément, sa Peau) détient ces données, mais elles ne sont pas accessibles au public. Mais encore une fois, je ne vois vraiment pas pourquoi vous désirez.
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, il n'existe aucun moyen dans l'API publique pour déterminer ce qui est actuellement utilisé comme couleur de fond pour un
Region
(y compris pour unControl
) (sauf si vous savez qu'il est défini par une ligne de style, dans ce cas, vous pouvez analyser le résultat degetStyle()
ou par un appel àsetBackground(...)
). Mais je ne vois pas pourquoi vous voudriez que cette, dont la couleur va revenir à ce qui est défini dans le fichier css si vous supprimez un des styles en ligne oubackground
propriété.Voici un exemple simple où la couleur d'arrière-plan est définie par un gradient linéaire (via une ligne de style) qui glisse comme une tâche progresse:
de couleur-tab-demo.css est presque exactement la même que vous avez posté, mais en utilisant un air de couleurs au lieu de
-fx-background-color
directement:tab.setStyle("");
. Pour tous ceux qui vont utiliser ce code n'oublie pas de nulle styles. Aussi, il est dommage que vous ne pouvez pas lire la couleur d'arrière-plan avec l'API publique ..., mais peut-être plus tard. Je vous remercie de l'homme.Pouvez obtenir/définir la couleur d'un Bouton assez facile.
Il suffit de suivre les méthodes d'arrière-plan -> BackgroundFill -> premier élément de getFills (); liste -> getFill() -- ce qui vous donne la Peinture à l'objet de ce nœud de l'arrière-plan.
Puis il suffit de lancer un objet en Couleur.
La valeur de la Couleur de l'objet est répertorié comme un nombre hexadécimal dont 6 derniers chiffres hexadécimaux assimiler à l'hex RVB pour cette couleur. Voir la sortie de l'exemple de code ci-dessous.
Il pourrait être plus sûr si j'avais utilisé l' !est égal à(.) méthode plutôt que d' != pour la couleur de la vérification, mais il semble bien fonctionner, de toute façon.
Dire que vous avez un motif en damier de la numérotés de 10 x 10 cases alternativement de couleur bleu ou orange selon que le carré du nombre est pair ou impair, respectivement.
Dire chaque carré est un Bouton et chaque fois qu'un joueur clique sur l'un d'entre eux, il est re-couleur rouge.
Mais si le joueur clique à nouveau sur la même place, elle est restaurée dans sa couleur d'origine.
Fonctionne pour moi.