Java 是否可以将窗格的高度/宽度绑定到边框窗格的中心节点?
我有一个任务要求我扩展pane类,然后在其上添加一个矩形。然后填充矩形并使用一些按钮更改矩形的颜色。我将扩展窗格类添加到边框窗格的中心节点,但我设想矩形占据整个窗格并绑定到窗格的高度和宽度,然后窗格又占据边框窗格的整个中心窗格并绑定到中心窗格的高度和宽度。我应该制作一个窗格,然后将扩展窗格添加到窗格中,然后将窗格添加到边框窗格的中心窗格中吗?这是我的全部代码。我在下面得到的图片也是如此Java 是否可以将窗格的高度/宽度绑定到边框窗格的中心节点?,java,javafx,Java,Javafx,我有一个任务要求我扩展pane类,然后在其上添加一个矩形。然后填充矩形并使用一些按钮更改矩形的颜色。我将扩展窗格类添加到边框窗格的中心节点,但我设想矩形占据整个窗格并绑定到窗格的高度和宽度,然后窗格又占据边框窗格的整个中心窗格并绑定到中心窗格的高度和宽度。我应该制作一个窗格,然后将扩展窗格添加到窗格中,然后将窗格添加到边框窗格的中心窗格中吗?这是我的全部代码。我在下面得到的图片也是如此 打包作业; 导入javafx.scene.shape.*; 导入javafx.application.app
打包作业;
导入javafx.scene.shape.*;
导入javafx.application.application;
导入javafx.beans.property.DoubleProperty;
导入javafx.beans.property.property;
导入javafx.beans.property.SimpleDoubleProperty;
导入javafx.geometry.Pos;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.layout.HBox;
导入javafx.scene.layout.Pane;
导入javafx.scene.layout.Region;
导入javafx.scene.layout.VBox;
导入javafx.scene.paint.Color;
导入javafx.stage.stage;
公共类ColorSample扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
//创建边框窗格
BorderPane bp=新的BorderPane();
//创建饱和度按钮
按钮btnMSat=新按钮(“更饱和”);
按钮btnLSat=新按钮(“不饱和”);
//创建色调按钮
按钮btnHueU=新按钮(“色调上升”);
按钮btnHueD=新按钮(“色调下降”);
//创建较暗/较亮的按钮
按钮btnDark=新按钮(“较暗”);
按钮btnBright=新按钮(“更亮”);
//创建顶部和底部HBox
HBox THBox=新的HBox(10);
THBox.设置校准(位置中心);
HBox BHBox=新的HBox(10);
BHBox.设置校准(位置中心);
//创建颜色窗格
颜色=Color.MEDIUMBLUE;
ColorPane cp=新的ColorPane(颜色);
cp.setColor(颜色);
//设置事件
//更多饱和度点击
btnMSat.setOnAction(e->{
cp.setColor(cp.moreStation(cp.getColor());
});
//较少的饱和度点击
btnLSat.setOnAction(e->{
cp.setColor(cp.lessuration(cp.getColor());
});
//调色
btnHueU.设置动作(e->{
cp.setHue(cp.getColor(),30);
});
//调低色调
btnHueD.setOnAction(e->{
cp.setHue(cp.getColor(),-30);
});
//深色的
b基准设定动作(e->{
cp.darker(cp.getColor());
});
//明亮的咔哒声
b基准设定动作(e->{
cp.brighter(cp.getColor());
});
//将饱和按钮添加到顶部HBox
THBox.getChildren().addAll(btnMSat、btnLSat);
设置顶部(THBox);
//将较暗/较亮的按钮添加到底部HBox
BHBox.getChildren().addAll(btnDark,btnBright);
bp.setBottom(BHBox);
//创建右侧VBox
VBox RVBox=新的VBox(10);
RVBox.设置校准(位置中心);
//将色调按钮添加到右侧VBox
RVBox.getChildren().addAll(btnHueU,btnHueD);
bp.setPrefSize(450325);
bp.setRight(RVBox);
//将颜色窗格添加到边框面板
设置中心(cp);
边框窗格。设置对齐(cp,位置中心);
//创建场景并向其添加边框窗格
场景=新场景(bp,525450);
初级阶段。场景(场景);
primaryStage.show();
}
类ColorPane扩展窗格{
矩形=新矩形();
彩色窗格(){
//设置属性
矩形.setX(0);
矩形.setY(0);
//装订宽度和高度
矩形。设置宽度(使用计算的大小);
矩形。设置高度(使用计算的大小);
getChildren().add(矩形);
}
彩色窗格(c色){
//设置属性
矩形.setX(0);
矩形.setY(0);
矩形。设置宽度(450);
矩形。设置高度(450);
//装订宽度和高度
矩形.widthProperty().bind(widthProperty());
矩形.heightProperty().bind(heightProperty());
setColor(c);
矩形。调整行程(c);
矩形。设置填充(c);
getChildren().add(矩形);
}
@凌驾
公共空间设置宽度(双w){
超级设定宽度(w);
}
@凌驾
公共空间设置高度(双h){
超级设定宽度(h);
}
公共色设置色调(彩色,双h){
双纽休=0;
if(color.getHue()+h>=360)
newHue=360;
else if(color.getBlue()+h1)
newSat=1;
其他的
newSat=Math.pow(color.getSaturation(),2);
颜色输出=Color.hsb(Color.getHue(),newSat,
color.getBrightness(),color.getOpacity());
返回输出;
}
公共颜色不饱和度(彩色){
双新闻AT=0;
if(Math.sqrt(color.getSaturation())>0)
newSat=Math.sqrt(color.getSaturation());
颜色输出=Color.hsb(Color.getHue(),newSat,
color.getBrightness(),color.getOpacity());
返回输出;
}
公共颜色较深(彩色)
package homework;
import javafx.scene.shape.*;
import javafx.application.Application;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.Property;
import javafx.beans.property.SimpleDoubleProperty;
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.Pane;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class ColorSample extends Application{
@Override
public void start (Stage primaryStage) {
//Create border pane
BorderPane bp = new BorderPane();
//Create saturation buttons
Button btnMSat = new Button("More Saturated");
Button btnLSat = new Button("Less Saturated");
//Create hue buttons
Button btnHueU = new Button("Hue Up");
Button btnHueD = new Button("Hue Down");
//Create Darker/Brighter buttons
Button btnDark = new Button("Darker");
Button btnBright = new Button("Brighter");
//Create Top and bottom HBoxes
HBox THBox = new HBox(10);
THBox.setAlignment(Pos.CENTER);
HBox BHBox = new HBox(10);
BHBox.setAlignment(Pos.CENTER);
//Create ColorPane
Color color = Color.MEDIUMBLUE;
ColorPane cp = new ColorPane(color);
cp.setColor(color);
//Set Events
//More Saturation Clicked
btnMSat.setOnAction(e->{
cp.setColor(cp.moreSaturation(cp.getColor()));
});
//Less Saturation Clicked
btnLSat.setOnAction(e->{
cp.setColor(cp.lessSaturation(cp.getColor()));
});
//Hue Up Clicked
btnHueU.setOnAction(e->{
cp.setHue(cp.getColor(), 30);
});
//Hue Down Clicked
btnHueD.setOnAction(e->{
cp.setHue(cp.getColor(), -30);
});
//Darker Clicked
btnDark.setOnAction(e->{
cp.darker(cp.getColor());
});
//Brighter Clicked
btnDark.setOnAction(e->{
cp.brighter(cp.getColor());
});
//Add Saturation Buttons to Top HBox
THBox.getChildren().addAll(btnMSat, btnLSat);
bp.setTop(THBox);
//Add Darker/Lighter buttons to Bottom HBox
BHBox.getChildren().addAll(btnDark, btnBright);
bp.setBottom(BHBox);
//Create right side VBox
VBox RVBox = new VBox(10);
RVBox.setAlignment(Pos.CENTER);
//Add Hue buttons to right side VBox
RVBox.getChildren().addAll(btnHueU, btnHueD);
bp.setPrefSize(450, 325);
bp.setRight(RVBox);
//Add ColorPane to Border Panel
bp.setCenter(cp);
BorderPane.setAlignment(cp, Pos.CENTER);
//Create scene and add border pane to it
Scene scene = new Scene(bp, 525, 450);
primaryStage.setScene(scene);
primaryStage.show();
}
class ColorPane extends Pane {
Rectangle rectangle = new Rectangle();
ColorPane() {
//Set properties
rectangle.setX(0);
rectangle.setY(0);
//Bind width and height
rectangle.setWidth(USE_COMPUTED_SIZE);
rectangle.setHeight(USE_COMPUTED_SIZE);
getChildren().add(rectangle);
}
ColorPane(Color c) {
//Set properties
rectangle.setX(0);
rectangle.setY(0);
rectangle.setWidth(450);
rectangle.setHeight(450);
//Bind width and height
rectangle.widthProperty().bind(widthProperty());
rectangle.heightProperty().bind(heightProperty());
setColor(c);
rectangle.setStroke(c);
rectangle.setFill(c);
getChildren().add(rectangle);
}
@Override
public void setWidth(double w) {
super.setWidth(w);
}
@Override
public void setHeight(double h) {
super.setWidth(h);
}
public Color setHue(Color color, double h) {
double newHue = 0;
if(color.getHue() + h >= 360)
newHue = 360;
else if (color.getBlue() + h <= 0)
newHue = 0;
else
newHue+=h;
Color output = Color.hsb(newHue, color.getSaturation(),
color.getBrightness(), color.getOpacity());
return output;
}
public Color moreSaturation(Color color) {
double newSat = 0;
if (Math.pow(color.getSaturation(), 2) > 1)
newSat = 1;
else
newSat = Math.pow(color.getSaturation(), 2);
Color output = Color.hsb(color.getHue(), newSat,
color.getBrightness(), color.getOpacity());
return output;
}
public Color lessSaturation(Color color) {
double newSat = 0;
if (Math.sqrt(color.getSaturation()) > 0)
newSat = Math.sqrt(color.getSaturation());
Color output = Color.hsb(color.getHue(), newSat,
color.getBrightness(), color.getOpacity());
return output;
}
public Color darker(Color color) {
double brightness = 0;
if(Math.pow(color.getBrightness(), 2) >=1)
brightness =1;
else
brightness = Math.pow(color.getBrightness(), 2);
Color output = Color.hsb(color.getHue(), color.getSaturation(),
brightness, color.getOpacity());
return output;
}
public Color brighter(Color color) {
double brightness = 0;
if(Math.sqrt(color.getBrightness())>0)
brightness = Math.sqrt(color.getBrightness());
Color output = Color.hsb(color.getHue(), color.getSaturation(),
brightness, color.getOpacity());
return output;
}
public Color getColor() {
return (Color) rectangle.getFill();
}
public void setColor(Color c) {
rectangle.setStroke(c);
rectangle.setFill(c);
}
}
public static void main(String[] args) {
Application.launch(args);
}
}
package homework;
import javafx.scene.shape.*;
import javafx.application.Application;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.Property;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.geometry.Insets;
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.Pane;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class ColorSample extends Application{
@Override
public void start (Stage primaryStage) {
//Create border pane
BorderPane bp = new BorderPane();
//Create saturation buttons
Button btnMSat = new Button("More Saturated");
Button btnLSat = new Button("Less Saturated");
//Create hue buttons
Button btnHueU = new Button("Hue Up");
Button btnHueD = new Button("Hue Down");
//Create Darker/Brighter buttons
Button btnDark = new Button("Darker");
Button btnBright = new Button("Brighter");
//Create Top and bottom HBoxes
HBox THBox = new HBox(10);
THBox.setAlignment(Pos.CENTER);
HBox BHBox = new HBox(10);
BHBox.setAlignment(Pos.CENTER);
//Create ColorPane
Color color = Color.MEDIUMBLUE;
ColorPane cp = new ColorPane(color);
cp.setColor(color);
//Set Events
//More Saturation Clicked
btnMSat.setOnAction(e->{
cp.setColor(cp.moreSaturation(cp.getColor()));
});
//Less Saturation Clicked
btnLSat.setOnAction(e->{
cp.setColor(cp.lessSaturation(cp.getColor()));
});
//Hue Up Clicked
btnHueU.setOnAction(e->{
cp.setHue(cp.getColor(), 30);
});
//Hue Down Clicked
btnHueD.setOnAction(e->{
cp.setHue(cp.getColor(), -30);
});
//Darker Clicked
btnDark.setOnAction(e->{
cp.darker(cp.getColor());
});
//Brighter Clicked
btnDark.setOnAction(e->{
cp.brighter(cp.getColor());
});
//Add Saturation Buttons to Top HBox
THBox.getChildren().addAll(btnMSat, btnLSat);
bp.setTop(THBox);
//Add Darker/Lighter buttons to Bottom HBox
BHBox.getChildren().addAll(btnDark, btnBright);
bp.setBottom(BHBox);
//Create right side VBox
VBox RVBox = new VBox(10);
RVBox.setAlignment(Pos.CENTER);
//Add Hue buttons to right side VBox
RVBox.getChildren().addAll(btnHueU, btnHueD);
//bp.setPrefSize(450, 325);
bp.setRight(RVBox);
//Add ColorPane to Center Border Panel
//Insets inset = new Insets(5,5,5,5);
//bp.setPadding(inset);
//bp.setAlignment(cp, Pos.CENTER);
bp.setCenter(cp);
//Create scene and add border pane to it
Scene scene = new Scene(bp, 525, 450);
primaryStage.setScene(scene);
primaryStage.show();
}
class ColorPane extends Pane {
Rectangle rectangle = new Rectangle();
ColorPane() {
//Set properties
rectangle.setX(0);
rectangle.setY(0);
//Bind width and height
/*rectangle.setWidth(USE_COMPUTED_SIZE);
rectangle.setHeight(USE_COMPUTED_SIZE);*/
getChildren().add(rectangle);
}
ColorPane(Color c) {
//Set properties
rectangle.setX(0);
rectangle.setY(0);
rectangle.setWidth(450);
rectangle.setHeight(450);
//Bind width and height
/*rectangle.widthProperty().bind(widthProperty());
rectangle.heightProperty().bind(heightProperty());*/
setColor(c);
rectangle.setStroke(c);
rectangle.setFill(c);
getChildren().add(rectangle);
}
@Override
public void setWidth(double w) {
super.setWidth(w);
}
@Override
public void setHeight(double h) {
super.setWidth(h);
}
public Color setHue(Color color, double h) {
double newHue = 0;
if(color.getHue() + h >= 360)
newHue = 360;
else if (color.getBlue() + h <= 0)
newHue = 0;
else
newHue+=h;
Color output = Color.hsb(newHue, color.getSaturation(),
color.getBrightness(), color.getOpacity());
return output;
}
public Color moreSaturation(Color color) {
double newSat = 0;
if (Math.pow(color.getSaturation(), 2) > 1)
newSat = 1;
else
newSat = Math.pow(color.getSaturation(), 2);
Color output = Color.hsb(color.getHue(), newSat,
color.getBrightness(), color.getOpacity());
return output;
}
public Color lessSaturation(Color color) {
double newSat = 0;
if (Math.sqrt(color.getSaturation()) > 0)
newSat = Math.sqrt(color.getSaturation());
Color output = Color.hsb(color.getHue(), newSat,
color.getBrightness(), color.getOpacity());
return output;
}
public Color darker(Color color) {
double brightness = 0;
if(Math.pow(color.getBrightness(), 2) >=1)
brightness =1;
else
brightness = Math.pow(color.getBrightness(), 2);
Color output = Color.hsb(color.getHue(), color.getSaturation(),
brightness, color.getOpacity());
return output;
}
public Color brighter(Color color) {
double brightness = 0;
if(Math.sqrt(color.getBrightness())>0)
brightness = Math.sqrt(color.getBrightness());
Color output = Color.hsb(color.getHue(), color.getSaturation(),
brightness, color.getOpacity());
return output;
}
public Color getColor() {
return (Color) rectangle.getFill();
}
public void setColor(Color c) {
rectangle.setStroke(c);
rectangle.setFill(c);
}
}
public static void main(String[] args) {
Application.launch(args);
}
}
bp.setAlignment(cp, Pos.TOP_LEFT);
bp.setCenter(cp);