使用JavaFx进行文本字段CSS样式设置

6

我正在尝试使用JavaFX样式化一些文本字段,但是我没有得到想要的结果。我的目标是让文本字段被表示为一个下划线。下面是我的CSS:

.text-field{
   -fx-font-family: "Quicksand";
   -fx-font-size: 18;
   -fx-padding: 1,1,1,1;
   -fx-border-color: grey;
   -fx-border-width: 2;
   -fx-border-radius: 1;
   -fx-border: gone;
   -fx-background-color: transparent;
   -fx-text-fill: grey;
}

我已经研究过这个问题,但是我发现类似的答案并没有足够的信息来正确地重现和应用到我的程序中。这也不利于我对CSS样式的了解。我尝试使用插图但效果很小。感谢提供任何答案!


为什么你没创建一个最小可运行代码并添加到你的问题中呢? - Reporter
2个回答

16

以下方法适用于我:

/* File style.css */

.text-field {
    -fx-background-color: -fx-text-box-border, -fx-background ;
    -fx-background-insets: 0, 0 0 1 0 ;
    -fx-background-radius: 0 ;
}
.text-field:focused {
    -fx-background-color: -fx-focus-color, -fx-background ;
}

以下是针对此测试的测试工具:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class TextFieldStyleTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        GridPane root = new GridPane();
        root.setHgap(10);
        root.setVgap(5);
        for (int row = 0 ; row < 4; row++) {
            for (int col = 0 ; col < 2; col++) {
                root.add(new TextField(), col, row);
            }
        }
        root.setPadding(new Insets(5));
        Scene scene = new Scene(root);
        scene.getStylesheets().add("style.css");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

生成

在此输入图片描述


谢谢,我的声望还不够高,暂时无法为您的帖子点赞。抱歉! - user7554125

6

如果你只需要一个下划线,那么你需要的最少内容是

.text-field {
  -fx-border-color: grey;
  -fx-border width: 0 0 1 0; // top, right, bottom, left
  -fx-background-color: transparent;
}

这将会把边框颜色改为灰色,除了底部边框外,将所有边框宽度设置为0,并将文本框的背景透明化,以便不是白色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接