Изменение цветовых атрибутов - PullRequest
0 голосов
/ 22 марта 2019

У меня есть этот код, куда я помещаю зеленое поле с кнопками вокруг него, чтобы изменить оттенок, насыщенность и сделать его темнее и светлее.У меня проблемы с изменением цвета.если кто-то может помочь, это было бы очень признательно.Мне нужно использовать обработчик событий для этого.если кто-нибудь может помочь мне с этой проблемой, это было бы очень признательно.Это то, что я должен делать.Как я уже сказал, у меня просто проблемы с получением части, меняющей цвет.

ColorPane: расширяет панель.Он будет иметь одну переменную экземпляра, Rectangle.

  • Конструктор для ColorPane будет
    • Создать прямоугольник и установить цвет заливки в нечто среднее: не слишком яркое или слишком темное, неслишком насыщенный или ненасыщенный.
    • Свяжите ширину и высоту прямоугольника с шириной и высотой панели.Таким образом, прямоугольник покроет всю панель
    • Установите положение прямоугольника на (0,0)
    • Добавьте прямоугольник на панель (это не дочерний элемент только потому, что он является переменной экземпляра)
  • Будет шесть методов, которые изменят цвет прямоугольника.Каждый из них будет следовать примерно одинаковому подходу:

    1. Получить заливку прямоугольника и привести его к цвету
    2. Получить оттенок, насыщенность и яркость цвета заливки (методыв цвете)
    3. Изменить компонент, который изменяется методом
    4. Воссоздать цвет (Color.hsb → https://docs.oracle.com/javafx/2/api/javafx/scene/paint/Color.html)
    5. Установить заливку прямоугольника
  • Каждый метод меняет один компонент цвета определенным образом
  • «Оттенок вверх» добавляет 30 к оттенку
  • «Оттенок вниз» вычитает 30 изhue
  • «Более насыщенный» заменяет насыщенность его квадратным корнем1
  • «Менее насыщенный» заменяет насыщенность его квадратом
  • «Темнее» заменяет яркость на квадрат
  • «Светлее» заменяет яркость квадратным корнем. ShowColors Определите переменную экземпляра типа ColorPane в классе. Визуальный макет должен использовать граничную панель в качестве основы. Создайте панели для верхнего нижнего края и справа для удержания т.он застегиваетПоместите ColorPane в центр.Вы можете обращаться к обработчикам любым способом, обсуждаемым в книге: внутренними классами, анонимными классами или лямбда-выражениями.
package application;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class ColorSample extends Application {
    private ColorPane colorPane = new ColorPane();

    @Override // Override the start method in the Application class
    public void start(Stage primaryStage) {     
        HBox hBox = new HBox();
        hBox.setSpacing(10);
        hBox.setAlignment(Pos.CENTER);
        Button btDarker = new Button("Darker");
        Button btBrighter = new Button("Brighter");
        hBox.getChildren().add(btDarker);
        hBox.getChildren().add(btBrighter);

        HBox hBox2 = new HBox();
        hBox2.setSpacing(10);
        hBox2.setAlignment(Pos.CENTER);
        Button btMsat = new Button("More Saturated");
        Button btLsat = new Button("Less Saturated");
        hBox2.getChildren().add(btMsat);
        hBox2.getChildren().add(btLsat);

        VBox vBox = new VBox();
        vBox.setSpacing(10);
        vBox.setAlignment(Pos.CENTER);
        Button btHup = new Button("Hue up");
        Button btHdown = new Button("Hue down");
        vBox.getChildren().add(btHup);
        vBox.getChildren().add(btHdown);


        BorderPane borderPane = new BorderPane();

        borderPane.setCenter(colorPane);
        borderPane.setTop(hBox2);
        borderPane.setRight(vBox);
        borderPane.setBottom(hBox);
        BorderPane.setAlignment(hBox, Pos.CENTER);
        BorderPane.setAlignment(vBox, Pos.CENTER_RIGHT);
        BorderPane.setAlignment(hBox2, Pos.TOP_CENTER);

        Scene scene = new Scene(borderPane, 600, 600);
        primaryStage.setTitle("ColorSample");// Set the stage title
        primaryStage.setScene(scene); // Place the scene in the stage
        primaryStage.show(); // Display the stage

    }

    public static void main(String[] args) {
        launch(args);
    }
}
class ColorPane extends StackPane {
    private Rectangle r = new Rectangle(); 

    public ColorPane() {
        getChildren().add(r);
        r.setWidth(520);
        r.setHeight(540);
        r.setFill(Color.GREEN);
        r.setStroke(Color.BLACK);
        r.setX(0);
        r.setY(0);
    }

}

1 Ответ

0 голосов
/ 26 марта 2019

Конструктор для ColorPane будет Создайте прямоугольник и установите цвет заливки на что-то среднее: не слишком яркое или слишком темное, не слишком насыщенное или ненасыщенное. Привязать ширину и высоту прямоугольника к ширине и высоте панели. Таким образом, прямоугольник покроет всю панель Установите положение прямоугольника в (0,0) Добавьте прямоугольник на панель (это не дочерний элемент только потому, что он является переменной экземпляра)

Для этого вам нужно использовать этот код:

Rectangle rectangle = new Rectangle(0, 0, pane.getPrefWidth(), pane.getPrefHeight());
pane.getChildren().add(rectangle);

Будет шесть способов изменить цвет прямоугольника. Каждый из них будет следовать примерно одинаковому подходу:

1: получить заполнение прямоугольника и привести его к цвету

2: получение оттенка, насыщенности и яркости цвета заливки (методы в цвете)

3: изменить компонент, который изменяется методом

4: воссоздать цвет (Color.hsb)

5: установить заливку прямоугольника

Чтобы получить цвет, сделайте следующее:

Color color = (Color) rectangle.getFill();

Чтобы получить оттенок, насыщенность и яркость цвета, сделайте следующее:

double hue = color.getHue();
double saturation = color.getSaturation();
double brightness = color.getBrightness();

Чтобы установить заливку прямоугольника, сделайте следующее:

rectangle.setFill(color);

Оттенок:

rectangle.setFill(Color.hsb(color.getHue() + 30, color.getSaturation(), color.getBrightness()));

Оттенок:

rectangle.setFill(Color.hsb(color.getHue() - 30, color.getSaturation(), color.getBrightness()));

более насыщенный:

rectangle.setFill(Color.hsb(color.getHue(), color.getSaturation()^2, color.getBrightness()));

Менее насыщенный:

rectangle.setFill(Color.hsb(color.getHue(), Math.sqrt(color.getSaturation()), color.getBrightness()));

зажигалка

rectangle.setFill(Color.hsb(color.getHue(), color.getSaturation(), color.getBrightness()^2));

Темнее:

rectangle.setFill(Color.hsb(color.getHue(), color.getSaturation(), Math.sqrt(color.getBrightness())));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...