JavaFX程序单选钮中挑选颜色

编写一个JavaFX程序,允许用户从5个单选钮中挑选一种颜色,在一个正方形中显示相应的颜色。

img

想请教为什么我运行出来是白板,什么都没有

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

```.

img


你这语法错的有点多,涉及到构造函数,局部变量 还有继承多看看,这个类代码替换一下就可以了


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


  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7602327
  • 你也可以参考下这篇文章:JavaFX 5种窗口 的展示方式
  • 除此之外, 这篇博客: 【案例分享】JavaFX实现简单学生成绩管理系统中的 三、实现代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 由于当时学习的时候还不太会处理class和全局变量之类的,所以代码全挤在一个java文件里面了,所以足足有一千多行.……(接受批评但是不接受辱骂私密马赛
    完整代码在本文最下面^^
    在这里插入图片描述

  • 以下回答由chatgpt基于相关博客总结生成:

    问题分析:

    根据问题描述,程序运行时只能看到一个空白的正方形,原因可能是单选钮未设置监听器,所以无法获取选中的颜色值。

    解决方案:

    1. 在JavaFX程序中定义一个正方形,用于显示选中的颜色值。
    Rectangle rectColor = new Rectangle(50, 50);
    rectColor.setStroke(Color.BLACK);
    
    1. 定义5个单选钮,每个单选钮对应一种颜色,设置单选钮的group为同一个ToggleGroup,用于实现单选效果。
    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);
    
    1. 将需要的单选钮添加到一个VBox容器中。
    VBox vbox = new VBox();
    vbox.getChildren().addAll(radioRed, radioGreen, radioBlue, radioYellow, radioOrange);
    
    1. 设置单选钮的监听器,当选中的单选钮改变时,更新正方形的颜色值。用setFill方法实现颜色填充。
    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;
                }
            }                
        }
    });
    
    1. 最后将VBox和Rectangle添加到程序的根节点中。
    @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();
    }
    

    完整代码如下: