我正在考试之前完成一些作业问题,需要澄清一下如何设置圆圈的颜色以显示用户从切换组中选择到屏幕上的内容。我收到一条错误消息,代码用于显示圆圈的大小,但是当我单击创建按钮时,我在图片中添加颜色时不会显示。我收到的错误消息是“线程中的异常”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);
我完全同意slaw,虽然还有另一个选项,他没有添加,并且需要更少的代码更改,并且使用.trim()
“返回字符串的副本,省略前导和尾随空格。”看起来像这样
RadioButton brown = new RadioButton("Brown ");
Color color = Color.valueOf(brown.getText().trim());
在下列情况下,IllegalArgumentException
会抛出Color.valueOf(String)
:
[...]该值指定不支持的颜色名称或非法十六进制值
您正在使用RadioButton
的文本来确定所需的颜色。您使用的文本是支持的颜色名称,除了一个小问题:每个文本的末尾都有一个空格。简单的解决方法是改变:
"Brown "
"Brown"
"Cyan "
"Cyan"
"Grey "
"Grey"
如果由于某种原因你有这些空格,或者不想使用Color.valueOf
,那么另一种选择是将每个RadioButton
与Color
相关联。至少有两种方法可以做到这一点:
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());
RadioButton
(Toggle
界面也声明setUserData
和getUserData
方法)。
RadioButton brown = new RadioButton("Brown ");
brown.setUserData(Color.BROWN);
// retrieval...
Color color = (Color) fillColor.getSelectedToggle().getUserData().
使用这些选项之一是可取的。使用RadioButton
的文本时,如果您将应用程序国际化,则会遇到问题。