2017-03-12 14 views
1

私はブートストラップCSSのようなカードを作成しようとしていますが、JavaFXコンポーネントを使用しています。私は丸いボーダーが欲しいが、トップ部分の背景色(見出し)が問題を与えている。JavaFX CSSには、ボーダーエッジを越える背景色を止める方法がありますか?

背景が境界をはみ出し、かなり醜いです。私はちょっとグーグルで、オーバーフロー:背景色に隠れていると解決するはずです。しかし、JavaFXのCSSはそれを持っていないようです。これを解決する別の方法がありますか?

私のソリューションは、これまで:JavaFX CSS Reference Guideで説明したように

card

+0

だろう-fx-background-radius: <top-left> <top-right> <bottom-right> <bottom-left>;を使用します。 – fabian

答えて

2

、オーバーフローはサポートされていません。

JavaFXのCSSは、フロート位置オーバーフロー、及びとしてCSSレイアウトプロパティをサポートしていません。ただし、CSS 埋め込みおよびのマージンプロパティは、一部のJavaFXシーングラフオブジェクトでサポートされています。レイアウトの他のすべての側面は、JavaFXコードでプログラム的に処理されます。さらに、表のようなHTML固有の要素に対するCSSのサポートは、JavaFXには同等の構成がないためサポートされていません。

ただし、丸められた背景の問題を解決するには-fx-background-radius-fx-border-radiusを使用できます。それらは同じ値でなければなりません。あなたはそれを見つけることができますhere in the reference guide


ここに、あなたが作成しようとしていると思うブートストラップ様のカードの例があります。あなたは(私の知る限り推測できるように)やりたい方法はCSSから行うことができないクリッププロパティを指定することです-fx-background-radius: 10 10 0 0;

Example

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(); 
} 
+0

私は実際に問題を解決するわけではないので、私はより明確に私の質問をクリアしたはずです。とにかくありがとうございました! – wimdetr

+0

私が意図したことをうまく表示するための例とスクリーンショットを追加しました。バックグラウンドのオーバーフローは、あなたが問題に直面していることですか?あなたは自然なCSSのように 'overflow:hidden'を持っていないので、' -fx-border-radius'と '-fx-background-radius'を組み合わせなければなりません。 –

+0

@ James_Dマシュー編集の前にそのコメントを投稿しました。ありがとう、マシュー、私はそのタグを見てきたとは信じられません...私はまだ良いタイトルを考えることはできません。 – wimdetr

関連する問題