2016-10-20 3 views
0

Я работаю над программой, в которой мне нужно нарисовать два изображения красным, когда я навешиваю кнопку, которая их соединяет. Дело в том, что мне нужно сделать это, пока его ПРАВИЛЬНО, а не когда пользователь нажимает кнопку. Я использую FXML с CSS для стилизации, но я не вижу способа вызвать метод из: hover css.Как мне назвать метод зависания в FXML?

ответ

1

В контроллере вы можете сделать

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); 
    }); 
} 

Тогда в CSS вы можете сделать

#someNode1, #someNode2 { 
    // regular styles 
} 

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

Вот SSCCE:

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> 

изюминка-на-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); 
    } 
} 

Не парит на кнопку:

enter image description here

висения на Кнопка:

enter image description here

+0

Это сработало отлично! Это займет немного времени, чтобы адаптировать его к моей программе, но это зависит от меня! У вас есть моя благодарность. – MundoPotus

Смежные вопросы