如何使用单选按钮的切换组将颜色显示为圆形

时间:2019-04-08 17:46:42

标签: javafx

我正在检查考试前的一些家庭作业问题,需要澄清一些问题,例如如何设置圆圈的颜色以在屏幕上显示用户从切换组中选择的内容。我收到一条错误消息,并且代码可以显示圆的大小,但是当我单击“创建”按钮时,在图片中添加颜色时不显示颜色。我收到的错误消息是“线程“ JavaFX Application Thread”中的异常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);

2 个答案:

答案 0 :(得分:1)

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

  

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

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

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

如果您出于某种原因而拥有这些空格,或者不想使用Color.valueOf,那么另一个选择是将每个RadioButton与一个Color关联。至少有两种方法可以做到这一点:

  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. 设置每个RadioButton的{​​{3}}(Toggle接口还声明setUserDatagetUserData方法)。

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

最好使用这些选项之一。在或是否将应用程序国际化时,使用RadioButton的文本会遇到问题。

答案 1 :(得分:1)

我完全同意slaw,尽管他没有添加另一种选择,并且将需要更少的代码更改,并且可以使用.trim()来“返回字符串的副本,省略前导和尾随空格”。看起来像这样

bison --name_prefix=GENLIB_yy