更改颜色属性



我有这个代码到我有一个带有按钮的绿色盒子的地方,以更改色调,饱和度,并使其更暗和更轻。我在颜色变化方面遇到麻烦。如果有人能提供帮助,将不胜感激。我需要使用活动处理程序来做到这一点。如果有人能帮助我解决这个问题,将不胜感激。这就是我应该做的。正如我所说,我只是难以获得颜色变化的一部分。

colorpane:扩展窗格。它将具有一个实例变量,一个矩形。

  • colorpane的构造函数将
    • 创建矩形并将填充颜色设置为中等事物:不太明亮或太黑,不要太黑饱和或不饱和。
    • 将矩形的宽度和高度结合到窗格的宽度和高度。这样,矩形将覆盖整个窗格
    • 将矩形的位置设置为(0,0)
    • 将矩形添加到窗格中(这不是一个孩子,只是因为它是实例变量)
  • 将有六种改变矩形颜色的方法。他们每个人都会遵循大致相同方法:

    1. 获取矩形的填充并将其施放为color
    2. 获得填充颜色的色调,饱和度和亮度(颜色的方法)
    3. 修改该方法正在更改的组件
    4. 重新创建颜色(color.hsb→https://docs.oracle.com/javafx/2/api/javafx/javafx/scene/paint/color.html)
    5. 设置矩形的填充
  • 每种方法将以特定方式更改颜色的一个组成部分
  • "色调"将30添加到色调
  • "色调"从色调中减去30
  • "更饱和"替代了饱和的平方root1
  • "较少饱和"将饱和取代其正方形
  • "较暗"将亮度替换为正方形
  • "打火机"用平方根代替亮度展示颜色定义了类中ColorPane的实例变量。视觉布局应使用边框窗格作为底座。为顶部和右下方创建窗格以保持按钮。放中心的配色台。您可以在书中讨论的任何方式接近处理程序:内部类,匿名课程或lambda表达式。
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);
    }
}

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())));

相关内容

  • 没有找到相关文章

最新更新