我有这个代码到我有一个带有按钮的绿色盒子的地方,以更改色调,饱和度,并使其更暗和更轻。我在颜色变化方面遇到麻烦。如果有人能提供帮助,将不胜感激。我需要使用活动处理程序来做到这一点。如果有人能帮助我解决这个问题,将不胜感激。这就是我应该做的。正如我所说,我只是难以获得颜色变化的一部分。
colorpane:扩展窗格。它将具有一个实例变量,一个矩形。
- colorpane的构造函数将
- 创建矩形并将填充颜色设置为中等事物:不太明亮或太黑,不要太黑饱和或不饱和。
- 将矩形的宽度和高度结合到窗格的宽度和高度。这样,矩形将覆盖整个窗格
- 将矩形的位置设置为
(0,0)
- 将矩形添加到窗格中(这不是一个孩子,只是因为它是实例变量)
-
将有六种改变矩形颜色的方法。他们每个人都会遵循大致相同方法:
- 获取矩形的填充并将其施放为color
- 获得填充颜色的色调,饱和度和亮度(颜色的方法)
- 修改该方法正在更改的组件
- 重新创建颜色(color.hsb→https://docs.oracle.com/javafx/2/api/javafx/javafx/scene/paint/color.html)
- 设置矩形的填充
- 每种方法将以特定方式更改颜色的一个组成部分
- "色调"将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())));