2016-10-20 2 views
0

Ich arbeite an einem Programm, in dem ich zwei Bilder rot malen muss, wenn ich den Mauszeiger über einen Knopf halte, der sie verbindet. Die Sache ist, dass ich dies während seiner HOVERING machen muss, nicht wenn der Benutzer auf die Schaltfläche klickt. Ich benutze FXML mit CSS für das Styling, aber ich sehe keine Möglichkeit, eine Methode aus dem: Hover von CSS aufzurufen.Wie rufe ich eine Methode aus dem Schweben in FXML?

Antwort

1

In Ihrem Controller können Sie

tun
private final PseudoClass highlightImage = PseudoClass.getPseudoClass("highlight"); 

@FXML 
private Node someNode1 ; 
@FXML 
private Node someNode2 ; 
@FXML 
private Button button ; 

public void initialize() { 
    button.hoverProperty().addListener((obs, wasHovered, isNowHovered) -> { 
     someNode1.pseudoClassStateChanged(highlightImage, isNowHovered); 
     someNode2.pseudoClassStateChanged(highlightImage, isNowHovered); 
    }); 
} 

Dann in der CSS Sie

#someNode1, #someNode2 { 
    // regular styles 
} 

#someNode1:highlight, #someNode2:highlight { 
    // hover styles 
} 

Hier ist ein SSCCE tun:

import javafx.css.PseudoClass; 
import javafx.fxml.FXML; 
import javafx.scene.control.Button; 
import javafx.scene.shape.Rectangle; 

public class HighlightOnHoverController { 

    @FXML 
    private Rectangle leftRect ; 
    @FXML 
    private Rectangle rightRect ; 
    @FXML 
    private Button button ; 

    private final PseudoClass highlightRect = PseudoClass.getPseudoClass("highlight"); 

    public void initialize() { 
     button.hoverProperty().addListener((obs, wasHovered, isNowHovered) -> { 
      leftRect.pseudoClassStateChanged(highlightRect, isNowHovered); 
      rightRect.pseudoClassStateChanged(highlightRect, isNowHovered); 
     }); 
    } 

    @FXML 
    private void click() { 
     System.out.println("Button clicked"); 
    } 
} 

HighlightOnHover.fxml:

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.layout.HBox?> 
<?import javafx.geometry.Insets?> 
<?import javafx.scene.shape.Rectangle?> 
<?import javafx.scene.control.Button?> 

<HBox xmlns:fx="http://javafx.com/fxml/1" fx:controller="HighlightOnHoverController" spacing="20" alignment="CENTER"> 
    <padding> 
     <Insets top="10" left="10" right="10" bottom="10" /> 
    </padding> 
    <Rectangle fx:id="leftRect" styleClass="rect" width="50" height="50" /> 
    <Button fx:id="button" text="Click Me" onAction="#click" /> 
    <Rectangle fx:id="rightRect" styleClass="rect" width="50" height="50" /> 
</HBox> 

Highlight-on-hover.css:

.rect { 
    -fx-fill: cornflowerblue ; 
} 
.rect:highlight { 
    -fx-fill: coral ; 
} 

HighlightOnHover.java:

import java.io.IOException; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

public class HighlightOnHover extends Application { 

    @Override 
    public void start(Stage primaryStage) throws IOException { 
     Scene scene = new Scene(FXMLLoader.load(getClass().getResource("HighlightOnHover.fxml"))); 
     scene.getStylesheets().add("highlight-on-hover.css"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

Nicht auf die Schaltfläche schweben:

enter image description here

auf das Schweben Knopf:

enter image description here

+0

Es funktionierte perfekt! Es wird somo Arbeit brauchen, um es an mein Programm anzupassen, aber das liegt an mir! Du hast meine Dankbarkeit. – MundoPotus

Verwandte Themen