web-dev-qa-db-fra.com

JavaFx: bordure de bouton et survol

J'utilise Java 8. J'ai une barre d'outils et des boutons dessus.

Je souhaite implémenter les éléments suivants:

  • Dans l'état habituel (sans survol de la souris) dans la barre d'outils, seule l'étiquette du bouton doit être vue (pas d'arrière-plan ni de bordures).
  • Lorsque la souris de l'utilisateur survole le bouton, le bouton habituel doit être vu.

Comment faire via css?

16
user2022068

Utilisez les styles pour supprimer l'arrière-plan:

.button {
    -fx-background-color: transparent;
}

En survol, pour tout ramener, utilisez simplement le style de bouton de modena.css:

.button:hover{
    -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color;
    -fx-background-insets: 0 0 -1 0, 0, 1, 2;
    -fx-background-radius: 3px, 3px, 2px, 1px;
    -fx-padding: 0.333333em 0.666667em 0.333333em 0.666667em; /* 4 8 4 8 */
    -fx-text-fill: -fx-text-base-color;
    -fx-alignment: CENTER;
    -fx-content-display: LEFT;
}
22
ItachiUchiha

La transparence de l'arrière-plan peut être contrôlée via des écouteurs de souris, c'est-à-dire en définissant le CSS par programmation (ce qui réduit le besoin d'une feuille de style externe):

final String IDLE_BUTTON_STYLE = "-fx-background-color: transparent;";
final String HOVERED_BUTTON_STYLE = "-fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color;";


button.setStyle(IDLE_BUTTON_STYLE);
button.setOnMouseEntered(e -> button.setStyle(HOVERED_BUTTON_STYLE));
button.setOnMouseExited(e -> button.setStyle(IDLE_BUTTON_STYLE));
3
Rahel Lüthy

Je suis d'accord avec netzwerg. Si vous utilisez fxml avec javafx, vous devez inclure ces lignes de codes dans la méthode initialize () de votre classe de contrôleur.

Exemple de classe de contrôleur:

public class Controller implements Initializable{
    private Button test;
    private static final String IDLE_BUTTON_STYLE = "-fx-background-color: transparent;";
    private static final String HOVERED_BUTTON_STYLE = "-fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color;";

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        button.setStyle(IDLE_BUTTON_STYLE);
        button.setOnMouseEntered(e -> button.setStyle(HOVERED_BUTTON_STYLE));
        button.setOnMouseExited(e -> button.setStyle(IDLE_BUTTON_STYLE));
    }
}
2