【问题标题】:does JavaFX css have a way to stop background color getting over the border edges?JavaFX css 是否有办法阻止背景颜色越过边界边缘?
【发布时间】:2017-03-12 15:34:43
【问题描述】:

我正在尝试制作类似于 bootstrap CSS 的卡片,但使用的是 JavaFX 组件。我想要一个圆形边框,但顶部(标题)的背景颜色给我带来了问题。

背景溢出边框,看起来很丑。我用谷歌搜索了一下,发现溢出:隐藏在背景颜色上应该可以解决它。 JavaFX css 似乎没有。有没有其他方法可以解决这个问题?

到目前为止我的解决方案:

【问题讨论】:

  • 做你想做的事(据我所知)的方法是指定无法从 CSS 完成的剪辑属性。

标签: css javafx styling user-experience


【解决方案1】:

JavaFX CSS Reference Guide 中所述,不支持溢出。

JavaFX CSS 不支持 CSS 布局属性,例如 floatpositionoverflowwidth。但是,某些 JavaFX 场景图对象支持 CSS paddingmargins 属性。布局的所有其他方面都在 JavaFX 代码中以编程方式处理。此外,不支持对 HTML 特定元素(如表格)的 CSS 支持,因为 JavaFX 中没有等效的构造。

但是,要解决圆形背景问题,您可以使用 -fx-background-radius-fx-border-radius。它们应该是相同的值。你可以找到它here in the reference guide


这是我认为您正在尝试制作的类似引导卡的示例。您将使用-fx-background-radius: <top-left> <top-right> <bottom-right> <bottom-left>;,即-fx-background-radius: 10 10 0 0;

public class Card extends StackPane {
    public BorderPane border = new BorderPane();
    public StackPane header = new StackPane(), content = new StackPane();
    public Card() {
        setAlignment(Pos.CENTER);
        getChildren().add(border);
        border.setTop(header);
        border.setCenter(content);
        border.setStyle("-fx-border-color: cornflowerblue; -fx-border-radius: 10; ");
        header.setStyle("-fx-background-color: derive(cornflowerblue, 70%); -fx-background-radius: 10 10 0 0; ");
        header.setMinWidth(100);
        header.setMinHeight(80);
        content.setMinWidth(100);
        content.setMinHeight(100);
    }

    public BorderPane getCard() {
        return border;
    }

    public StackPane getHeader() {
        return header;
    }

    public StackPane getContent() {
        return content;
    }
}

public void start(Stage stage) throws Exception {
    Card card = new Card();
    card.setPadding(new Insets(10,10,10,10));

    GridPane grid = new GridPane();
    grid.setVgap(10); grid.setHgap(10);
    grid.setAlignment(Pos.CENTER);
    grid.addRow(0, new Label("Username"), new TextField());
    grid.addRow(1, new Label("Password"), new PasswordField());
    grid.addRow(2, new Button("Submit"));
    card.getContent().getChildren().add(grid);

    Label title = new Label("Card Example");
    title.setFont(Font.font("Tahoma", FontWeight.SEMI_BOLD, 36));
    card.getHeader().getChildren().add(title);

    StackPane stack = new StackPane();
    stack.setAlignment(Pos.CENTER);
    stack.getChildren().add(card);

    Scene scene = new Scene(stack, 500, 300);
    stage.setTitle("Boostrap-like Card Example");
    stage.setScene(scene);
    stage.show();
}

【讨论】:

  • 猜我应该更清楚地解决我的问题,因为这实际上并不能解决问题。还是谢谢你!
  • 我添加了一个示例和屏幕截图,希望能说明我的意思。背景溢出是您遇到的问题,对吗?由于您没有像自然 CSS 中那样的 overflow: hidden,因此您必须将 -fx-border-radius-fx-background-radius 结合起来。
  • @James_D 我在 Matthew 编辑他的答案之前发布了该评论。谢谢你,马修,我不敢相信我已经看过那个标签了……不过我还是想不出一个好的标题。
  • @user3470438 你的意思是问题标题?我来这里就是为了寻找这个,所以我想这还不错:)
猜你喜欢
  • 2018-11-14
  • 2017-09-19
  • 1970-01-01
  • 2012-10-09
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
相关资源
最近更新 更多