不工作的CSS样式javafx -fx-strikethrough

时间:2014-11-10 12:33:57

标签: java css javafx

我想使用CSS来删除文字。

我使用标签:

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

但是这段代码正常,请帮忙。

2 个答案:

答案 0 :(得分:5)

您需要使用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样式表来实现此功能(或使用内联查找,这是不可取的) - 样式表无论如何都是最佳解决方案。 p>

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

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

答案 1 :(得分:4)

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