【问题标题】:not working ccs style javafx -fx-strikethrough不工作 ccs 样式 javafx -fx-strikethrough
【发布时间】:2014-11-10 12:33:57
【问题描述】:

我想使用 CSS 制作文本删除线。

我使用标签:

button.setStyle("-fx-strikethrough: true;");

但是这段代码可以工作,请帮忙。

【问题讨论】:

    标签: java css javafx


    【解决方案1】:

    您需要使用 CSS 样式表在按钮上启用删除线。无论如何,使用 CSS 样式表通常比使用内联 CSS setStyle 命令更可取。

    /** file: strikethrough.css (place in same directory as Strikeout) */
    .button .text {
        -fx-strikethrough: true;
    }
    

    CSS 样式表使用 CSS 选择器来选择按钮内的文本并对其应用删除线样式。目前(从 Java 8 开始),setStyle 命令不能使用 CSS 选择器,因此您必须使用 CSS 样式表来实现此功能(或使用内联查找,这是不可取的)——无论如何,样式表是最好的解决方案。

    查看@icza 的回答,了解为什么尝试直接在按钮上设置-fx-strikethrough 样式不起作用。

    这是一个示例应用程序:

    import javafx.application.Application;
    import javafx.geometry.Insets;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    
    public class Strikeout extends Application {
    
        @Override 
        public void start(Stage stage) throws Exception {
            Button strikethrough = new Button("Strikethrough");
            strikethrough.getStylesheets().addAll(getClass().getResource(
                    "strikethrough.css"
            ).toExternalForm());
    
            StackPane layout = new StackPane(
                    strikethrough
            );
            layout.setPadding(new Insets(10));
            stage.setScene(new Scene(layout));
    
            stage.show();
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    

    关于使用删除线与禁用的评论

    我要补充一点,如果您想删除按钮上的文本,您可能还想禁用该按钮,您可以通过调用button.setDisable(true) 来实现。当您这样做时,它将使按钮不起作用并提供一个可见的指示,表明它已被禁用。默认情况下,此可见指示将是按钮上的文本显示为灰色。通常,这是使用删除线设置按钮文本样式的更可取的方法。

    【讨论】:

      【解决方案2】:

      Button 不支持 -fx-strikethrough CSS 属性,因此设置此属性无效。

      这里是官方的 JavaFX 8 CSS 参考:JavaFX CSS Reference Guide

      -fx-strikethrough 是为 Text 节点定义的。

      Button 仅支持以下:canceldefault,并且都继承自Labeled

      -fx-alignment, -fx-text-alignment, -fx-text-overrun, -fx-wrap-text, -fx-font, 
      -fx-underline, -fx-graphic, -fx-content-display, -fx-graphic-text-gap,
      -fx-label-padding, -fx-text-fill, -fx-ellipsis-string
      

      Labeled 继承自Control-fx-skin-fx-focus-traversable

      所以查看支持的属性,以下工作(当然不是删除线):

      button.setStyle("-fx-underline: true");
      

      【讨论】:

      • 谢谢。我仔细看了。
      • 有什么方法可以让按钮上的文字被删除线?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多