按钮悬停和按下效果CSS Javafx

按钮悬停和按下效果CSS Javafx,java,javafx,javafx-css,Java,Javafx,Javafx Css,我是CSS新手,为按钮定义了以下CSS样式,带有id,并应用了自定义样式,但没有悬停和按下效果 #斜角灰色{ -fx背景色:线性渐变(#F2F2F2F2,#d6d6d6),线性渐变(#fcfcfc 0%,#d9d9d9 20%,#D6D6 100%),线性渐变(#dddddd 0%,#F6F6 50%); -外汇背景半径:8,7,6; -外汇背景插图:0,1,2; -fx文本填充:黑色; -特效:dropshadow(三通盒,rgba(0,0,0.6),5,0.0,0,1); } #斜角灰色:悬

我是CSS新手,为按钮定义了以下CSS样式,带有id,并应用了自定义样式,但没有悬停和按下效果

#斜角灰色{
-fx背景色:线性渐变(#F2F2F2F2,#d6d6d6),线性渐变(#fcfcfc 0%,#d9d9d9 20%,#D6D6 100%),线性渐变(#dddddd 0%,#F6F6 50%);
-外汇背景半径:8,7,6;
-外汇背景插图:0,1,2;
-fx文本填充:黑色;
-特效:dropshadow(三通盒,rgba(0,0,0.6),5,0.0,0,1);
}
#斜角灰色:悬停{
-fx背景色:#981100;
}
#斜角灰色:压制{
-fx背景色:#235891;
}
#斜角灰色
替换为
。按钮
不会提供自定义效果,但适用于悬停和按下。如何使其与定义的自定义样式一起工作

更新

主代码,重现问题

package application;

import java.util.List;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.text.Font;
import javafx.scene.text.TextAlignment;


public class Main extends Application 
{
     @Override
     public void start(Stage primaryStage) 
     {
          try 
          {
              Pane p = new Pane();
              Scene scene = new Scene(p,400,400);
              Button b = new Button();
              b.setId("bevel-grey");
              b.getStylesheets().add(getClass().getResource("ButtonStyles.css").toExternalForm());
              b.setLayoutX(150);
              b.setLayoutY(300);
              b.setPrefWidth(100);
              b.setText("Start");
              p.getChildren().add(b);
              primaryStage.setScene(scene);
              primaryStage.show();
          } 
          catch(Exception e) 
          {
              e.printStackTrace();
          }
      }

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

据我所知,正在应用由
:hover
:pressed
指定的样式,但默认样式中的渐变不会保持。这是有道理的,因为:

#斜角灰色:悬停{
-fx背景色:#981100;
}
替换以下声明的背景色:

#斜角灰色{
-fx背景色:线性渐变(#F2F2F2F2,#d6d6d6),线性渐变(#fcfcfc 0%,#d9d9d9 20%,#D6D6 100%),线性渐变(#dddddd 0%,#F6F6 50%);
/*…为简洁起见省略*/
}
#斜角灰色相同:按下
。如果要继续使用所述线性渐变,则需要更改线性渐变使用的颜色。一个明显的方法是简单地为每个伪类重新声明
线性渐变(…)
背景色,但使用新的渐变色。然而,在我看来,一个更易于维护的解决方案是使用所谓的。下面是一个例子:

#斜角灰色{
-fx颜色一号:#D6;
-fx颜色二:#d9d9d9;
-fx颜色三:#f6f6f6;
-fx背景色:
线性渐变(#f2f2,-fx颜色一),
线性梯度(#fcfc 0%,-fx颜色2 20%,-fx颜色1 100%),
线性梯度(#DDDD 0%,-fx颜色三个50%);
-外汇背景半径:8,7,6;
-外汇背景插图:0,1,2;
-fx文本填充:黑色;
-特效:dropshadow(三通盒,rgba(0,0,0.6),5,0.0,0,1);
}
#斜角灰色:悬停{
-fx颜色一号:#981100;
-fx颜色二:#981100;
-fx颜色三:#981100;
}
#斜角灰色:压制{
-fx颜色一号:#235891;
-fx颜色二:#235891;
-fx颜色三:#235891;
}
我不得不猜测一些颜色值,因为我不确定你想要的最终结果是什么样子。上述CSS提供以下输出:



作为一个旁白,考虑使用<代码>:武装< /代码>而不是<代码>:按下按钮/代码>按钮控件。

:pressed
伪类仅在按下鼠标时激活,而按钮可以通过其他操作(例如,在按钮有焦点时按下空格键或Enter键)启用。

我无法重现该问题。请提供您的问题,好吗?@Slaw请检查更新。我跳过了其他元素,只展示了按钮。这不是一个简单的例子。什么是
application.css
p.getChildren().add(l)
中的
l
是什么?
ButtonStyles.css
是否仅包含问题中提供的css?为了澄清问题:如问题所示,您当前使用的CSS没有应用
:hover
:pressed
样式,对吗?另外,您使用的是什么版本的JavaFX?抱歉。css用于设置场景样式、背景颜色等,这些可能不需要,但已删除。如问题中所述,悬停和按下效果不适用于css中的定义。问题中给出了ButtonStyles.css中的完整css。是否存在渐变未被带入
:hover
:pressed
样式的问题?因为否则我仍然无法重现问题(按钮的颜色会在适当的时候为我更改)。