JavaFx:按钮边框和悬停

2022-09-02 09:02:27

我使用的是Java 8。我有工具栏和按钮。

我想实现以下内容:

  • 在工具栏的通常状态(没有鼠标悬停)下,只能看到按钮标签(没有背景,也没有边框)。
  • 当用户鼠标悬停在按钮上时,必须看到通常的按钮。

如何通过css做到这一点?


答案 1

使用样式删除背景 :

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

悬停时,要恢复所有内容,只需使用按钮样式即可: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;
}

答案 2

我同意netzwerg的观点。如果将 fxml 与 javafx 一起使用,则应在控制器类的 initialize() 方法中包含这些代码行。

控制器类示例:

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

推荐