javafx - 如何使用单选按钮的切换组向圆圈显示颜色
问题描述
我在考试前正在解决一些家庭作业问题,需要澄清一下我如何设置圆圈的颜色以将用户从切换组中选择的内容显示到屏幕上。我收到一条错误消息,代码可以显示圆圈的大小,但是当我在图片中添加颜色时,当我单击创建按钮时不显示。我收到的错误消息是“线程中的异常”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);
解决方案
An在以下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
在使用国际化应用程序时或如果您将应用程序国际化时,您将遇到问题。
推荐阅读
- groovy - 如何从 groovy 匿名类访问超级或父方法?
- python - 确保 aiohttp/asyncio 中递归函数的未来
- streamsets - Streamsets Transformer - 没有偏移列的 JDBC Origin
- c# - 通过用户模拟将用户添加到活动目录
- c# - 查找字符串中重复字符序列的有效方法
- google-cloud-platform - 如何使用 Google Cloud Storage 将文件夹目标设置到存储桶中?
- npgsql - PostgreSQL 和 Blazor .Net Core 3.1
- r - 如果行值为真,则折叠 R 中的变量
- jenkins - 如何在詹金斯蓝海 UI 中显示超链接?
- google-apps-script - 从 Google Aps 脚本中的文本输入字段捕获输入