首页 > 解决方案 > 如何使用单选按钮的切换组向圆圈显示颜色

问题描述

我在考试前正在解决一些家庭作业问题,需要澄清一下我如何设置圆圈的颜色以将用户从切换组中选择的内容显示到屏幕上。我收到一条错误消息,代码可以显示圆圈的大小,但是当我在图片中添加颜色时,当我单击创建按钮时不显示。我收到的错误消息是“线程中的异常”JavaFX 应用程序线程“java.lang.IllegalArgumentException:无效的颜色规范”并且无法在线找到该问题的解决方案

我尝试了下面的代码,但它根本不起作用。

    HBox circleColour = new HBox();
    circleColour.setSpacing(20);
    Label task7 = new Label("What colour do you want the circle: ");
    RadioButton brown = new RadioButton("Brown ");
    RadioButton cyan = new RadioButton("Cyan ");
    RadioButton grey = new RadioButton("Grey ");

    ToggleGroup fillColour = new ToggleGroup();
    brown.setToggleGroup(fillColour);
    cyan.setToggleGroup(fillColour);
    grey.setToggleGroup(fillColour);


      HBox newC = new HBox();
     layout.setRight(newC);

     click.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent e) {
            //radius
            double newRadius = Double.parseDouble(circleSize.getText());
            circle = new Circle(newRadius);

            //This does not display
            //fill colour
            RadioButton selectedRB = 
      (RadioButton)fillColour.getSelectedToggle();
            String colour = selectedRB.getText();
            System.out.println(colour);
            Color fc = Color.valueOf(colour);
            circle.setFill(fc);

标签: javafx

解决方案


An在以下IllegalArgumentException情况下抛出Color.valueOf(String)

[...] 该值指定了不受支持的颜色名称或非法的十六进制值

您正在使用 的文本RadioButton来确定所需的颜色。您使用的文本是受支持的颜色名称,除了一个小问题:每个文本的末尾都有一个空格。简单的解决方法是更改​​:

  • "Brown ""Brown"
  • "Cyan ""Cyan"
  • "Grey ""Grey"

如果您有这些空格是有原因的,或者不想使用Color.valueOf,那么另一种选择是将每个空格RadioButtonColor. 至少有两种方法可以做到这一点:

  1. 使用Map<RadioButton, Color>(或者Map<Toggle, Color>如果您愿意)。

    Map<Toggle, Color> colors = new HashMap<>();
    
    RadioButton brown = new RadioButton("Brown ");
    colors.put(brown, Color.BROWN);
    
    // retrieval...
    Color color = colors.get(fillColor.getSelectedToggle());
    
  2. 设置每个的用户数据RadioButtonToggle接口也声明setUserDatagetUserData方法)。

    RadioButton brown = new RadioButton("Brown ");
    brown.setUserData(Color.BROWN);
    
    // retrieval...
    Color color = (Color) fillColor.getSelectedToggle().getUserData().
    

最好使用这些选项之一。RadioButton在使用国际化应用程序时或如果您将应用程序国际化时,您将遇到问题。


推荐阅读