编写一个JavaFX程序,允许用户从5个单选钮中挑选一种颜色,在一个正方形中显示相应的颜色。
想请教为什么我运行出来是白板,什么都没有
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.control.RadioButton;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class ColorOptions extends Application
{
public void start(Stage primaryStage)
{
ColorOptionsPane pane = new ColorOptionsPane();
pane.setAlignment(Pos.CENTER);
pane.setStyle("-fx-background-color:white");
Scene scene = new Scene(pane,500,150);
primaryStage.setTitle("Color Options");
primaryStage.setScene(scene);
primaryStage.show();
}
}
import javafx.event.ActionEvent;
import javafx.geometry.Pos;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class ColorOptionsPane extends HBox
{
//private rectangle color;
private RadioButton redButton,greenButton,orangeButton,yellowButton,blueBUtton;
private Rectangle colorBox;
public void ColorOptionPane()
{
colorBox = new Rectangle(100, 100, Color.RED);
StackPane colorPane=new StackPane(colorBox);
colorPane.setPrefSize(300,100);
//放到一个组里
ToggleGroup group = new ToggleGroup();
//设置红色单选钮
RadioButton redButton = new RadioButton("Red");
redButton.setToggleGroup(group);
redButton.setSelected(true);
redButton.setOnAction(this::processRadioButtonAction);
//设置绿色单选钮
RadioButton greenButton = new RadioButton("Green");
greenButton.setToggleGroup(group);
greenButton.setSelected(true);
greenButton.setOnAction(this::processRadioButtonAction);
//设置橘色单选钮
RadioButton orangeButton = new RadioButton("Orange");
orangeButton.setToggleGroup(group);
orangeButton.setSelected(true);
orangeButton.setOnAction(this::processRadioButtonAction);
//设置黄色单选钮
RadioButton yellowButton = new RadioButton("Yellow");
yellowButton.setToggleGroup(group);
yellowButton.setSelected(true);
yellowButton.setOnAction(this::processRadioButtonAction);
//设置蓝色单选钮
RadioButton blueButton = new RadioButton("Blue");
blueButton.setToggleGroup(group);
blueButton.setSelected(true);
blueButton.setOnAction(this::processRadioButtonAction);
VBox options = new VBox(redButton,greenButton,orangeButton,yellowButton,blueBUtton);
options.setAlignment(Pos.CENTER_LEFT);
options.setSpacing(10);
setSpacing(20);
getChildren().addAll(options,colorBox);
}
public void processRadioButtonAction(ActionEvent event)
{
if(redButton.isSelected())
colorBox.setFill(Color.RED);
else if (greenButton.isSelected())
colorBox.setFill(Color.GREEN);
else if (orangeButton.isSelected())
colorBox.setFill(Color.ORANGE);
else if (yellowButton.isSelected())
colorBox.setFill(Color.YELLOW);
else
colorBox.setFill(Color.BLUE);
}
}
```.
import javafx.event.ActionEvent;
import javafx.geometry.Pos;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class ColorOptionsPane extends HBox {
//private rectangle color;
private RadioButton redButton, greenButton, orangeButton, yellowButton, blueButton;
private Rectangle colorBox;
public ColorOptionsPane() {
super();
colorBox = new Rectangle(100, 100, Color.RED);
StackPane colorPane = new StackPane(colorBox);
colorPane.setPrefSize(300, 100);
//放到一个组里
ToggleGroup group = new ToggleGroup();
//设置红色单选钮
redButton = new RadioButton("Red");
redButton.setToggleGroup(group);
redButton.setSelected(true);
redButton.setOnAction(this::processRadioButtonAction);
//设置绿色单选钮
greenButton = new RadioButton("Green");
greenButton.setToggleGroup(group);
greenButton.setSelected(true);
greenButton.setOnAction(this::processRadioButtonAction);
//设置橘色单选钮
orangeButton = new RadioButton("Orange");
orangeButton.setToggleGroup(group);
orangeButton.setSelected(true);
orangeButton.setOnAction(this::processRadioButtonAction);
//设置黄色单选钮
yellowButton = new RadioButton("Yellow");
yellowButton.setToggleGroup(group);
yellowButton.setSelected(true);
yellowButton.setOnAction(this::processRadioButtonAction);
//设置蓝色单选钮
blueButton = new RadioButton("Blue");
blueButton.setToggleGroup(group);
blueButton.setSelected(true);
blueButton.setOnAction(this::processRadioButtonAction);
VBox options = new VBox(redButton, greenButton, orangeButton, yellowButton, blueButton);
options.setAlignment(Pos.CENTER_LEFT);
options.setSpacing(10);
setSpacing(20);
getChildren().addAll(options, colorBox);
}
public void processRadioButtonAction(ActionEvent event) {
if (redButton.isSelected())
colorBox.setFill(Color.RED);
else if (greenButton.isSelected())
colorBox.setFill(Color.GREEN);
else if (orangeButton.isSelected())
colorBox.setFill(Color.ORANGE);
else if (yellowButton.isSelected())
colorBox.setFill(Color.YELLOW);
else
colorBox.setFill(Color.BLUE);
}
}
由于当时学习的时候还不太会处理class和全局变量之类的,所以代码全挤在一个java文件里面了,所以足足有一千多行.……(接受批评但是不接受辱骂私密马赛
完整代码在本文最下面^^
问题分析:
根据问题描述,程序运行时只能看到一个空白的正方形,原因可能是单选钮未设置监听器,所以无法获取选中的颜色值。
解决方案:
Rectangle rectColor = new Rectangle(50, 50);
rectColor.setStroke(Color.BLACK);
RadioButton radioRed = new RadioButton("Red");
RadioButton radioGreen = new RadioButton("Green");
RadioButton radioBlue = new RadioButton("Blue");
RadioButton radioYellow = new RadioButton("Yellow");
RadioButton radioOrange = new RadioButton("Orange");
ToggleGroup group = new ToggleGroup();
radioRed.setToggleGroup(group);
radioGreen.setToggleGroup(group);
radioBlue.setToggleGroup(group);
radioYellow.setToggleGroup(group);
radioOrange.setToggleGroup(group);
VBox vbox = new VBox();
vbox.getChildren().addAll(radioRed, radioGreen, radioBlue, radioYellow, radioOrange);
group.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
public void changed(ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle) {
if (group.getSelectedToggle() != null) {
RadioButtonbutton = (RadioButton) group.getSelectedToggle();
switch(button.getText()){
case "Red":
rectColor.setFill(Color.RED);
break;
case "Green":
rectColor.setFill(Color.GREEN);
break;
case "Blue":
rectColor.setFill(Color.BLUE);
break;
case "Yellow":
rectColor.setFill(Color.YELLOW);
break;
case "Orange":
rectColor.setFill(Color.ORANGE);
break;
}
}
}
});
@Override
public void start(Stage primaryStage) {
VBox vBox = new VBox();
vBox.getChildren().addAll(radioRed, radioGreen, radioBlue, radioYellow, radioOrange);
Rectangle rectColor = new Rectangle(50, 50);
rectColor.setStroke(Color.BLACK);
StackPane root = new StackPane();
root.getChildren().addAll(vBox, rectColor);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Color Selector");
primaryStage.setScene(scene);
primaryStage.show();
}
完整代码如下: