我将这段代码转到有一个绿色框的地方,该框周围有按钮,可以更改色调,饱和度并使它更暗和更亮。我在颜色变化方面遇到麻烦。如果有人可以帮助您,将不胜感激。我需要使用事件处理程序来执行此操作。如果有人可以帮助我解决这个问题,将不胜感激。这就是我应该做的。就像我说的那样,我只是遇到了颜色变化的麻烦。
ColorPane:扩展窗格。它将有一个实例变量,即Rectangle。
(0,0)
将有六种更改矩形颜色的方法。他们每个人都会遵循大致相同 方法:
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);
}
}
答案 0 :(得分:0)
ColorPane的构造函数将 创建矩形并将填充颜色设置为中等:不要太亮或太暗,不要太饱和或不饱和。 将矩形的宽度和高度绑定到窗格的宽度和高度。这样,矩形将覆盖整个窗格 将矩形的位置设置为(0,0) 将矩形添加到窗格中(这不是一个孩子,仅仅是因为它是一个实例变量)
为此,您需要使用以下代码:
Rectangle rectangle = new Rectangle(0, 0, pane.getPrefWidth(), pane.getPrefHeight());
pane.getChildren().add(rectangle);
将有六种方法更改矩形的颜色。他们每个人都将遵循大致相同的方法:
1:获取矩形的Fill并将其投射为Color
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())));