Двухцветный JavaFX TableCell Фон? - PullRequest
1 голос
/ 07 июля 2019

У меня есть javafx.scene.control.TableView, содержащий некоторые javafx.scene.control.TableColumn с, содержащие некоторые javafx.scene.control.TextField с.Некоторые из TextFields должны получить двухцветный фон: по диагонали, верхняя левая половина одного цвета, нижняя правая половина другого цвета.Как и ячейки для Ge, Sb, Po в https://de.wikipedia.org/wiki/Periodensystem#/media/Datei:Periodensystem_deutsch_-_neue_Farben.svg. Возможно ли это без фонового изображения?

Редактировать: добавлен некоторый код.Для простоты я опустил окружающий стол и теперь использую 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);
    }

}

Позже, когда я буду использовать сетку 13x13 Text, мне придется вставлять каждый Text в свой собственный StackPane или другой (возможно, более подходящий) подкласс Region, чтобы иметь возможность предоставить индивидуально окрашенный фон для каждого Text.И некоторые из этих Text с (особенно тот, что в этом примере) должны иметь двухцветный фон, оба цвета разделенные линией от левого нижнего до правого верхнего угла.

Простым решением будетпредоставить фоновое изображение.Это не так уж сложно произвести.Но тогда я должен создать новое фоновое изображение для каждой пары цветов.Я бы предпочел более гибкое решение.

Все установщики свойств и свойства CSS, которые я обнаружил, предоставляют одноцветный фон.Но иногда мне требуется двухцветный.

Предлагаемый LineGradient будет приемлемым, если все остальное не поможет.Я бы предпочел четкую границу между обоими цветами, а не градиент.

1 Ответ

1 голос
/ 24 июля 2019

Хорошо, я нашел решение, по крайней мере, для упрощенной проблемы.Благодаря @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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...