如何使用单选按钮的切换组向圆圈显示颜色

问题描述 投票:0回答:2

我正在考试之前完成一些作业问题,需要澄清一下如何设置圆圈的颜色以显示用户从切换组中选择到屏幕上的内容。我收到一条错误消息,代码用于显示圆圈的大小,但是当我单击创建按钮时,我在图片中添加颜色时不会显示。我收到的错误消息是“线程中的异常”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
2个回答
1
投票

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

RadioButton brown = new RadioButton("Brown ");

Color color = Color.valueOf(brown.getText().trim());

1
投票

在下列情况下,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. 设置每个user dataRadioButtonToggle界面也声明setUserDatagetUserData方法)。 RadioButton brown = new RadioButton("Brown "); brown.setUserData(Color.BROWN); // retrieval... Color color = (Color) fillColor.getSelectedToggle().getUserData().

使用这些选项之一是可取的。使用RadioButton的文本时,如果您将应用程序国际化,则会遇到问题。

© www.soinside.com 2019 - 2024. All rights reserved.