Javafx 如何通过在FXML中悬停调用方法?
我正在开发一个程序,当我将鼠标悬停在连接两个图像的按钮上时,我需要将两个图像涂成红色。问题是,我需要在鼠标悬停时执行此操作,而不是在用户单击按钮时。Javafx 如何通过在FXML中悬停调用方法?,javafx,hover,fxml,Javafx,Hover,Fxml,我正在开发一个程序,当我将鼠标悬停在连接两个图像的按钮上时,我需要将两个图像涂成红色。问题是,我需要在鼠标悬停时执行此操作,而不是在用户单击按钮时。 我正在使用FXML和css进行样式设置,但我看不到任何方法可以从css的:hover中调用方法 在控制器中,您可以执行以下操作 private final PseudoClass highlightImage = PseudoClass.getPseudoClass("highlight"); @FXML private Node someNod
我正在使用FXML和css进行样式设置,但我看不到任何方法可以从css的:hover中调用方法 在控制器中,您可以执行以下操作
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中,您可以执行以下操作
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);
});
}
#someNode1、#someNode2{
//常规样式
}
#someNode1:突出显示,#someNode2:突出显示{
//悬停样式
}
以下是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:
highlight-on-hover.css:
.rect{
-fx填充:矢车菊蓝;
}
.rect:突出显示{
-外汇填料:珊瑚;
}
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);
}
}
不在按钮上悬停:
将鼠标悬停在按钮上:
在控制器中,您可以执行以下操作
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中,您可以执行以下操作
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);
});
}
#someNode1、#someNode2{
//常规样式
}
#someNode1:突出显示,#someNode2:突出显示{
//悬停样式
}
以下是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:
highlight-on-hover.css:
.rect{
-fx填充:矢车菊蓝;
}
.rect:突出显示{
-外汇填料:珊瑚;
}
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);
}
}
不在按钮上悬停:
将鼠标悬停在按钮上:
它工作得非常好!这将需要一些工作,以适应我的计划,但这取决于我!我很感激你,它工作得很好!这将需要一些工作,以适应我的计划,但这取决于我!我感谢你。