JavaFX TableCell是双色背景吗?

时间:2019-07-07 13:44:59

标签: css javafx

我有一个javafx.scene.control.TableView,其中包含一些javafx.scene.control.TableColumn,其中包含一些javafx.scene.control.TextFieldTextFields中的某些应该具有双色背景:对角分割,左上半部分为一种颜色,右下半部分为另一种颜色。类似于https://de.wikipedia.org/wiki/Periodensystem#/media/Datei:Periodensystem_deutsch_-_neue_Farben.svg中Ge,Sb和Po的单元格。如果没有背景图片,这可能吗?

编辑:添加了一些代码。为简单起见,我省略了周围的表格,现在使用javafx.scene.text.Text代替javafx.scene.control.TextField。接下来的基本设置为StackPane(作为开始)提供了统一的背景。

public class DividedBackgroundDemo extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
    primaryStage.setTitle("Test: Diagonally divided colour background");

    Text txt = new Text("Text");
    txt.setFont(Font.font("Arial", FontWeight.BOLD, FontPosture.REGULAR, 50));

    StackPane root = new StackPane();
    root.getChildren().add(txt);
    root.setStyle("-fx-background-color: blue;");

    primaryStage.setScene(new Scene(root, 200, 200));
    primaryStage.show();
    }

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

}

稍后,当我将使用Text的13x13网格时,我将必须将每个Text嵌入到其自己的StackPane或{{ 1}},以便能够为每个Region提供单独彩色的背景。并且其中一些Text(尤其是本例中的一个)应该具有双色背景,两种颜色都由左下角到右上角的线划分。

简单的解决方案是提供背景图像。生产一个不是很困难。但是,然后,我必须为每种颜色生成新的背景图像。我希望有一个更灵活的解决方案。

我发现的所有属性设置器和CSS属性都提供一种单色背景。但是有时候我需要双色。

如果其他所有方法均失败,则建议的Text是可以接受的。我希望两种颜色之间都有清晰的边框,而不是渐变。

1 个答案:

答案 0 :(得分:1)

好吧,至少在简化问题上,我找到了解决方案。感谢@kleopatra。作为路径,我使用了javafx.scene.shape.Polygon and filled it with the appropriate colour. Using a StackPane`,注意z坐标很重要。背景自然位于底部,填充的折线作为窗格中的第一内容,文本位于顶部。

public class DividedBackgroundDemo extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Test: Diagonally divided colour background");

        Text txt = new Text("Text");
        txt.setFont(Font.font("Arial", FontWeight.BOLD, FontPosture.REGULAR, 50));

        Polygon triangle = new Polygon();
        triangle.getPoints().addAll(new Double[] { 0.0, 0.0, 200.0, 0.0, 0.0, 200.0 });
        triangle.setFill(Color.YELLOW);

        StackPane root = new StackPane();
        root.getChildren().add(triangle);
        root.getChildren().add(txt);
        root.setStyle("-fx-background-color: blue;");

        primaryStage.setScene(new Scene(root, 200, 200));
        primaryStage.show();
    }

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